スタックとヒープ C++ 質問する

スタックとヒープ C++ 質問する

スタック変数とヒープ変数の仕組みについて、ちょっと質問があります。私の理解では、スタック変数は関数が戻った後に削除される変数で、ヒープ変数は永続的です。しかし、私が本当に混乱しているのは、関数内でヒープ変数を割り当てる方法です。

int MyObject::addObject(const char* a){
    MyObject newObject(a);
    return 0;
}

のコンストラクターがあるとしMyObjectますnewObject(const char * a)。この関数で呼び出されると、戻った後に新しく構築された はnewObject削除されますか?削除される場合、関数内でヒープに割り当てるにはどうすればよいですか?そうでない場合、後でメモリをクリーンアップするにはどうすればよいでしょうか?

さらに、デストラクタの役割は正確には何であり、いつ呼び出されるのでしょうか?

ベストアンサー1

クラスのコンストラクタMyObjectは でありMyObject()、 ではありませんnewObject()。あなたの例では、newObjectはコンストラクタではなく変数の名前です。

関数内でヒープ領域を割り当てるには、次のnew演算子を呼び出す必要があります。

int MyObject::addObject(const char* a){
    MyObject* newObject = new MyObject(a);
    //newObject is allocated on the heap

    //... Some more code...

    delete newObject;
    //you have to explicitly delete heap-allocated variables
    //if not, you get memory leaks
    return 0;
}

あなたのコード:

MyObject newObject(a);

MyObjectと呼ばれる自動ストレージ (スタック) を作成します。newObjectこれは、宣言されたスコープが終了するまで (つまり、閉じるまで) 存続します}

さらに、デストラクタの役割は正確には何であり、いつ呼び出されるのでしょうか?

newまたはnew[](または)で割り当てられ、所有されているクラス内のメモリをクリーンアップしますmalloc。これは、自動オブジェクトの場合、オブジェクトがスコープ外になったとき、または動的オブジェクトの場合、明示的に呼び出されたときに呼び出されますdelete

おすすめ記事