拷贝构造函数进行创建对象的时候假如定义一个指针,对象t1中的指针P指向对象t2中的指针p指向同一块内存空间,创建对象的时候先创建t1,后创建t2,t1和t2的指针p指向同一块内存,析构的时候先析构t2,在析构t1,析构t2的时候已经把p所指的内存空间释放了,析构t1的时候p就没有指向内存空间了所以出现内存泄漏,具体代码如下: .h文件
#ifndef STU_H
#define STU_H
class stu
{
public:
//stu();
int *p;
int age;
int no;
stu();
~stu();
stu(stu &r);//拷贝构造函数,给成员变量赋值
};
#endif // STU_H
.cpp文件
#include "stu.h"stu::stu(){}stu::stu(stu &r){// this->p=r.p;}}stu::~stu(){free(this->p);//此处释放的时候会出现内存泄漏,this->p=NULL;}main.c文件
#include <iostream>#include"stu.h"using namespace std;void f1(){stu st1;st1.age=100;st1.no=100;stu st2(st1);cout<<st2.age<<endl;cout<<st2.no<<endl;}void f2(){stu a;a.p=(int *)malloc(sizeof(int));stu b(a);}int main(int argc, char *argv[]){// f1();cout << "Hello World!" << endl;return 0;}
本文通过一个具体的代码示例介绍了如何在使用拷贝构造函数时可能会导致内存泄漏的问题。详细解释了当两个对象的指针指向同一块内存空间,并在析构时先后释放这块内存可能导致的错误。
1108

被折叠的 条评论
为什么被折叠?



