隐式销毁内置指针类型成员
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两次。
本文探讨了如何在C++中正确地使用析构函数销毁类Test,涉及默认析构和显式释放内置指针。错误处理和自定义析构函数对内存安全的影响,以及为何在定义析构函数时要考虑拷贝构造函数和赋值构造函数的必要性。
16万+

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



