C内存释放
我正在尝试测试我对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的析构函数? 解决方法
是的,一般是的.
{ Matrix t; { Matrix m(50,20); t=m; } }
会发生什么是调用赋值运算符: t.operator=(m); 作为Matrix的实现者,您需要确保有效的语义.有几种可能的方法: >赋值运算符可以复制m的数据.在这种情况下,终身和所有权都没有困难.但是,在这种方法中,分配成本很高. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |