文件CTest.h
class Name {
};
class CTest
{
public:
CTest(size_t s = 10);
~CTest(void);
public:
Name* p;
size_t size;
};
文件CTest.cpp
#include "Test.h"
#include <iostream>
#include <windows.h>
#include <tchar.h>
CTest::CTest(size_t s)
{
p = new Name[size = s];
std::cout<< "Constructor_Call" << std::endl;
}
CTest::~CTest(void)
{
delete[] p;
std::cout<< "Destructor_Call" << std::endl;
}
文件main.cpp
#include "Test.h"
int main ()
{
CTest t1;
CTest t2 = t1;
CTest t3;
t3 = t2;
return 0;
}
上面 的例子中,采用的是默认的复制构造函数和默认的复制赋值函数。
但是它会带来两个问题
1. 对象t3.p指向的内存地址被t2.p覆盖,导致未能正确释放。
2.对象t1.p 指向的内存,被释放了3次。
执行程序,结果如下: