私はこのようなクラスを持っています:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
Inner* m_inner;
};
.cpp では、コンストラクターがInner
withのインスタンスを作成しnew
、デストラクターがそれをdelete
s します。これはかなりうまくいっています。
このコードを使用するように変更したいので、次のauto_ptr
ように記述します。
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
std::auto_ptr<Inner> m_inner;
};
これで、コンストラクターが を初期化しauto_ptr
、デストラクタは何もしません。
しかし、うまくいきません。このクラスをインスタンス化するときに問題が発生するようです。次の警告が表示されます。
警告 C4150: 不完全な型 'Inner' へのポインターの削除。デストラクタが呼び出されていません
ええと、これは明らかに非常に悪いことであり、私はそれが起こる理由を理解していInner
ます.auto_ptr<Inner>
だから私の質問:auto_ptr
単純なポインターだけを使用するバージョンで行ったように、前方宣言で使用する方法はありますか?
ポインターを宣言する#include
すべてのクラスに対して行うことは、非常に面倒で、時には不可能なこともあります。この問題は通常どのように処理されますか?