我正在尝试测试我对 C++ 内存分配的理解。
对于以下程序:
{
int a=0;
}
由于a
是在堆栈外分配的,所以当变量超出范围时应该释放它,对吗?
好吧,够简单的。这个案子怎么办:
{
Matrix m(50, 20);
}
假设有一个矩阵类,我正在创建一个具有 50 行和 20 列的新类。显然,并不是所有的内存都可以在堆栈外分配,因为 50 和 20 可以在运行时填充。所以我猜在构造函数的某个地方,他们从堆中分配内存。
当超出范围时m
调用析构函数?那个析构函数应该释放(删除)它分配的内存吗?
现在真的很难了:
{
Matrix t;
{
Matrix m(50, 20);
t=m;
}
}
那会发生什么?t 是否被分配到 m 的内存位置?还是它会复制 m 中的数据?如果 t 是对 m 的引用,那么当 m 超出范围时会发生什么?m 上的析构函数是否被调用?还是等到 t 超出范围才调用 t/m 的析构函数?