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