« CSV Mailer バージョン0.3.1公開 | メイン | ゼピール サーキュレーター ブラック DKS-20 »

C++Builderの自動変数

C++Builderの自動変数について。

C++の自動変数は、自動的にコンストラクタとデストラクタが呼ばれます。

{
  TTest test; //コンストラクタが呼ばれる
} //スコープを抜けるとデストラクタが呼ばれる

一方、newで生成したオブジェクトは、deleteしなければなりません。

{
  TTest* test = new TTest(); //コンストラクタが呼ばれる
} //スコープを抜けてもデストラクタは呼ばれない。deleteしないとメモリリーク。

C++Builderでは、TObjectを継承しているクラスは、自動変数として使用できません。

TStringList list; //コンパイルエラー
TStringList* list = new TStringList(); //OK

std::unique_ptrを使えば、TObjectを継承しているクラスも自動変数のように扱うことができます。
(古いC++Builderにはstd::unique_ptrはありませんので、std::auto_ptrを使います。)

#include <memory>
{
  std::unique_ptr<TStringList> list(new TStringList());  //コンストラクタが呼ばれる
} //スコープを抜けるとデストラクタが呼ばれる

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/998

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2009年07月02日 20:00に投稿されたエントリーのページです。

ひとつ前の投稿は「CSV Mailer バージョン0.3.1公開」です。

次の投稿は「ゼピール サーキュレーター ブラック DKS-20」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35