如何解决如何观察C ++析构函数破坏基本数据类型?
我有两个类,一个是主类,另一个是Test,对于Test类,我有Test.cpp和Test.h
//-----Test.h--------//
#pragma once
class Test
{
private:
int num;
public:
Test(void);
Test(int n);
~Test(void);
};
//------Test.cpp------//
#include "Test.h"
#include<iostream>
using namespace std;
Test::Test(void)
{
}
Test::Test(int n)
{
num = n;
}
Test::~Test(void)
{
cout << "Deleted" << endl;
cout << "num = " << num << endl ;
}
//---------main.cpp--------------//
#include "Test.h"
#include<iostream>
using namespace std;
int main()
{
Test t1 = Test(5);
return 0;
}
我期望的输出是
已删除
num = 0
但是实际输出是
已删除
数字= 5
为什么会这样,为什么析构函数会淡出内存 或dint删除基本数据类型,如何删除变量, 我可以用什么方法观察基本数据类型被删除?
解决方法
销毁对象并不意味着将值设置为零。那将是不必要的工作。相反,所需要做的就是释放资源。除非有迫不得已的理由,否则位通常按原样保留(在您的示例中为5
)。
此外,下课后成员被销毁。在您的示例中,首先运行~Test()
销毁t1
,然后销毁t1.num
。 Test
的析构函数无法查看Test::num
的销毁。
为什么要使用析构函数,dint释放内存或dint删除基本数据类型
您没有在堆中分配任何内存,因此无需释放任何内容。
您所拥有的只是一个基本类型int
,它不需要任何内存释放。
相反,如果您有一些指针成员变量:
private:
int* num;
,然后将其分配到构造函数中的某个位置:new int(6);
,然后确保必须在析构函数内部对其进行释放/释放。
在这种情况下,共享指针可能会有所帮助,共享指针会在析构函数之后自动销毁:
std::shared_ptr<int> num;
但是必须构造它,在构造函数中,您需要:
Test::Test(int n)
: num(std::make_shared<int>(n)
{
// *n == 100
}
要查看数据是否已删除,请使用 Valgrind 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。