クラスconstructor
は、オブジェクトのアドレスをパラメータとして受け取ります。このクラスのDestructor
でメモリがヒープ上にあるかどうかを確認しますか?
MyClass(OtherClass * otherClass);
は私がdelete
にOtherClass
のインスタンスを試してみてください。
~MyClass() {
if(otherClass != nullptr) {
delete otherClass;
}
}
私がいる問題は、私はこのconstructor
を呼び出すときに、私は、このように私は以下のようにそれを呼び出す、stack
からではなくheap
から要素とそれを呼び出すです:
のMyClass MyClassの(& otherObject );
したがって、myClass
オブジェクトが範囲外になると例外が発生します。私のOtherObject
変数がstack
またはheap
に宣言されていればどうすればいいですか?つまり、どうすればオブジェクトをdelete
できますか?
あなたが任意のオブジェクトの所有権のルールを持っていない場合は、コードが混乱になり、あなたはこのような問題を持っているつもりです。通常、ポインタを渡すことは、そのオブジェクトに「所有権を与える」ことです。あなたがそれを望まないなら、それを参照に変更する必要があります。 – tadman
提供された引数の "所有権"を持っているかどうかにかかわらずクラス契約の明確な部分にして、オブジェクトを作成するコードを正しく指定する必要があります。 –
'shared_ptr 'の使用を検討します。あなたは決してそれに与えられた "スタックオブジェクト"を持つことができません。安全面では良いことです –