> 変数宣言をしたら内部的にnewをする
仮にこういう実装だとしたら、インターフェイス等を使用する際に問題があるかと。
interface IInterface // 適当なインターフェイス
class Data:IInterface// インターフェイスを継承 + 実装をする
Data data; // Data型がnewされる。OK
IInterface obj1 = new Data(); // Data型がnewされてIInterface型として使用できる。OK
IInterface obj2; // 実装が無いのでインスタンス化できない。NG
これとは別に、C++で考えると次の様になるはず。
Data data; // OK
IInterface* obj1 = new Data(); //OK
IInterface obj2; // NG VC2010では、error C2259: 'IInterface' : 抽象クラスをインスタンス化できません。
IInterface* obj3 = NULL; // OK。 C++0x/11ならnullptrの方が良い?
> 「変数宣言だけして、インスタンス化はしない」
何か遅延評価的な場合とか?
ちょっと違うかもしれませんが:
class Data1
{
Data data;
Data func()
{
if (data == null)
{
data = new Data();
}
return data;
}
}
class Data2
{
Data data = new Data();
Data func()
{
return data;
}
}