Should Member Data Always be Cleared/Zeroed in the Destructor?(成员数据是否应始终在析构函数中清除/清零?)
问题描述
是否有充分的理由不清除/清零析构函数中的对象的基本成员数据?为了整洁或隐私,这似乎应该被视为标准做法,因为有一些可能的方法可以重新读取已删除对象的数据:
(请注意, 将成员数据清零是否花费了"太多时间",从而被认为是不值得的(尤其是在必须遍历数组并将每个元素清零的情况下)? 显然,对于更复杂的数据成员(如STL容器),这不是问题,因为their destructors clear their data,而且pointers should not be cleared用于调试目的。 如果您的类包含"机密"内容,则在描述时将其清除将有助于防止将其保留在您不再拥有的内存中。但这并不意味着当您的应用程序使对象处于活动状态时,您可以阻止某人拍摄内存快照,因此作为一种安全措施,这是非常糟糕的……#include <iostream>
class Box {
public:
Box(int s) : secret(s), buffer(this) {}
~Box() {}
/*BETTER DESTRUCTOR ~Box() {secret = 0;}*/
void print() {std::cout << secret << std::endl;}
private:
void* buffer;
int secret;
};
int main() {
Box* carton = new Box(8675309);
Box* crate = carton;
delete carton;
crate->print();
}
buffer
是必需的,因为如果没有它,某些内容将覆盖crate->print()
之前的secret
。)
推荐答案
std::vector
将会这样做。它将销毁向量的所有内容,因为不知道这些元素的析构函数做了什么。
这篇关于成员数据是否应始终在析构函数中清除/清零?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:成员数据是否应始终在析构函数中清除/清零?
基础教程推荐
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++,'if' 表达式中的变量声明 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 设计字符串本地化的最佳方法 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01