在C++类中存在成员指针并且在类中为该指针动态申请内存,且该类的对象可能作为函数的形参时,是一定要提供拷贝构造函数的,防止前拷贝直接将该指针拷贝走
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
class A
{
private:
char* szBuf;
public:
A();
~A();
};
A::A()
{
szBuf = new char[6];
strcpy(szBuf, "HELLO");
}
A::~A()
{
if(strlen(szBuf))
delete [] szBuf;
szBuf = NULL;
}
void Fun(A a)
{
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
A a;
Fun(a);
return 0;
}
这段代码就演示了如果没有提供默认拷贝构造函数的情况下,当A类对象作为参数传入函数时,由于没有提供自定义的拷贝构造函数而进行了位拷贝生成了形参临时变量,导致函数返回清理该临时对象时调用析构函数将外层A类对象的字符串指针是否,导致外层调用析构函数的时候重复是否指针的问题(可以再A类析构函数这里加断点 看进去了几次,同事看下析构函数中szBuf保存的地址是否为同一个)