メモリを動的に割り当てるクラスを設計しているときに、メモリ割り当てに関する次の問題に遭遇しました。クラスをより良い方法で設計する方法について、あなたの何人かが私を正しい方向に向けることができることを望んでいました. 私のクラスはメモリを動的に割り当てるため、デストラクタでも削除します。
問題を説明するために、次のばかげたクラス宣言を考えてみましょう。
class testClass{
int* data;
public:
testClass(){
data = new int;
*data = 5;
}
~testClass(){
delete data;
}
};
ここまでは順調ですね。ここで、これらのオブジェクトの 1 つをメインに作成するとします。
int main(){
testClass myObject;
return 0;
}
もちろんまだ問題はありません。しかし、testClass オブジェクトを入力として受け取る関数を作成し、これを main から呼び出すとします。
void doNoting(testClass copyOfMyObject){
//do nothing
}
int main(){
testClass myObject;
doNothing(myObject);
return 0;
}
今回は、この関数はローカル変数 copyOfMyObject を作成しますが、これは単に myObject のコピーです。次に、その関数の最後に到達すると、そのローカル オブジェクトのデストラクタが自動的に呼び出され、データ ポインタが指すメモリが削除されます。ただし、これは myObject のデータ ポインタが指しているメモリと同じであるため、myObject のメモリは処理中に誤って削除されてしまいます。私の質問は、クラスを設計するためのより良い方法は何ですか?