怎样阻止这段代码的内存泄漏

题主没搞清复制构造和复制赋值的区别=_=
■网友
要注意一个问题:你定义了复制构造函数,但没有定义“=”操作符。执行a3=a1的结果很可能不是你想要的。
■网友
update终于明白你意思了这样就好了#include\u0026lt;iostream\u0026gt;using namespace std;class SeqList{private:\tint * data; //数组指针\tint size;public:\tSeqList(int n = 100) //构造函数\t{\t\tcout \u0026lt;\u0026lt; "call constructor" \u0026lt;\u0026lt; endl;\t\tdata = https://www.zhihu.com/api/v4/questions/30998612/new int;/t/tsize = n;/t}/tvoid CopyFunc(const SeqList/u0026amp; p) // 实际上的复制函数/t{/t/tcout /u0026lt;/u0026lt;"call copy constructor" \u0026lt;\u0026lt; endl;\t\tsize = p.size;\t\tdata = https://www.zhihu.com/api/v4/questions/30998612/new int;/t/tfor (int i = 0; i/u0026lt;size; i++)/t/t/tdata = p.data;/t}/tSeqList(SeqList/u0026amp; p) //复制构造函数/t{/t/tCopyFunc(p);/t}/tSeqList/u0026amp; operator=(const SeqList/u0026amp; rhs) // 重载操作符/t{/t/tCopyFunc(rhs);/t/treturn *this;/t}/t~SeqList() // 析构/t{/t/tdelete data;/t}};int main(void){/tSeqList a1(5);/tSeqList a3(5);/ta3 = a1;/treturn 0;}如果非要是=的功能只是复制指针地址而非内容的话,那么改用shared_ptr当指针比较好,这样一来,析构也不用写了。-1.这个在我看来确实不叫内存泄漏,内存泄漏的意思是动态申请的内存在使用完毕后没有被释放,你这个,虽然说确实没有析构函数来释放,但更大的问题不在于此。SeqList a2(a1)的时候,问题在于复制构造函数中data = https://www.zhihu.com/api/v4/questions/30998612/new int中的size是一个未初始化变量,所以导致了段错误,我琢磨着是你粗心。2.不要使用未定义变量,记得写析构函数释放内存。话说回来,即使这样,你这段代码也达不到内存泄漏的程度,a1a2a3是定义在main函数中的,如果离开了main函数的作用域,内存就直接被系统回收了,不用写析构来释放,内存泄漏多是发生于运行周期稍微长一些的程序中的,您这个运行完就回收了,所以不算。3.问题后半句没看懂,对于前半句,我表示我才疏学浅,暂时还没遇到过这样的问题。
■网友
手机码 简单说new int告诉我 size 初始化在哪?项目中 有 主要是用在提前预分配一些内存 (内存池) 一些全局变量(用的时候别越界了)这样可以避免线程内频繁的去new这些内存主程序退出后会系统自然销毁干净点 可以手动delete但是 循环 多线程内new的需要及时销毁否则会把系统内存撑爆的另外a3=a2赋值没错
■网友
不泻药,哥是做java的


    推荐阅读