隐式销毁内置指针类型成员
Test.h
使用默认析构函数
#pragma once
#include<iostream>
using namespace std;
class Test
{
public:
Test() = default;
Test(int dt) : data(dt) {}
Test(int dt, Test* p) : data(dt), ptest(p) {}
void printData()
{
cout << data;
}
private:
int data;
Test* ptest; // 指向Test对象的指针
};
Test.cpp
#include<iostream>
#include"Test.h"
using namespace std;
int main()
{
Test t1(1);
{
Test t2(2, &t1);
}
t1.printData();
return 0;
}
运行结果:输出1
显示销毁内置类型指针成员
Test.h
#pragma once
#include<iostream>
using namespace std;
class Test
{
public:
Test() = default;
Test(int dt) : data(dt) {}
Test(int dt, Test* p) : data(dt), ptest(p) {}
void printData()
{
cout << data;
}
~Test()
{
delete ptest; // 释放ptest指向的空间
}
private:
int data;
Test* ptest; // 指向Test对象的指针
};
运行结果:报错读取位置发生冲突
另外需要注意的一点是当我们自己定义了析构函数,最好也定义拷贝构造函数和赋值构造函数,因为使用默认的拷贝构造函数和赋值构造函数可能导致ptest被delete两次。