C++のメモリ割り当てについての理解をテストしようとしています。
次のプログラムの場合:
{
int a=0;
}
はスタックから割り当てられているのでa
、変数がスコープ外になったときに解放する必要がありますよね?
さて、簡単です。この場合はどうですか?
{
Matrix m(50, 20);
}
マトリックスクラスがあり、50行20列の新しいクラスを作成しているとしましょう。明らかに、実行時に50と20が投入される可能性があるため、すべてのメモリをスタックから割り当てることができるわけではありません。ですから、コンストラクターのどこかで、ヒープからメモリを割り当てていると思います。
それがスコープ外になると、デストラクタm
が呼び出されますか?そして、その記述子は、割り当てたメモリの割り当てを解除(削除)する必要がありますか?
今、それは本当に難しくなります:
{
Matrix t;
{
Matrix m(50, 20);
t=m;
}
}
それではどうなりますか?mのメモリ位置に割り当てられませんか?または、mのデータのコピーを実行しますか?tがmへの参照である場合、mがスコープ外になるとどうなりますか?mのデストラクタは呼び出されますか?または、tがスコープ外になるまでt / mのデストラクタを呼び出すのを待ちますか?