ポインタメンバ変数を設定し、私は次のように簡略化されたクラスL
持っている:正しく
C
が別のクラスである
class L
{
private:
C * _pc ;
public:
C * getc() const ; // getter
void setc(const C * ipc); //setter
~L()
{
delete _pc ;
}
};
を。
私はまた、次のように簡略化ヘルパークラスCHelper
を持っている:
class CHelper
{
C _c ;
CHelper(L & ic)
{
// 1st constructs _c (code omitted);
// then sets ic's _pc pointer member variable :
ic.setc(&_c);
}
};
私は確信してされることなく、何とか_pc
の削除に問題があるだろうと感じています。それはどうですか?
このような承認の瑕疵は何ですか?正しいアプローチで同じ「機能」(ポインタメンバー変数を正しく設定する)にはどうすれば到達できますか?
http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three –
実際にあなたのアプローチに問題があります。まず、 'CHelper'オブジェクトが破壊されると、' _c'メンバも破壊されます。 '_pc'はガベージをポイントします。次に、 'delete _pc;'は同じオブジェクトに対して2回目の破壊を試みます。私はstdのスマートポインタを調べることをお勧めします。 –
あなたの例はコンパイルされません。 'L'クラスの中で、デストラクタの名前は'〜C'です。それは動作しません。また、クラスの構築時に '_pc'をnullptrに初期化する必要があります。代わりに 'shared_ptr'や' unique_ptr'のようなスマートポインタを考えることもできます。 – Hayt