我正在尝试测试自己对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的析构函数?
Matrix
的程序员所决定的内容,我们无法知道。 - Cheers and hth. - AlfMatrix
的编码方式。 - juanchopanza