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());  //コンストラクタが呼ばれる
} //スコープを抜けるとデストラクタが呼ばれる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください