如何定义我是否需要在我的类的析构函数中调用“delete []”作为指针? 指针(成员变量)可以指出在不同时间内在堆中分配的缓冲区(它可以是只读内存中的文字或放置在堆栈中的文字)。 解决它的最佳方法是什么? 我是否只需要使用另一个标志,或者可以获取堆边界的地址并检查它们之间是否有缓冲区地址? 还是有更合理的方式?
答案 0 :(得分:2)
std::string
代替char *
或std::vector
而非动态分配的数据成员)或答案 1 :(得分:2)
您无法通过查看指针来判断指针是在自动存储,静态存储器还是动态存储器中。您需要在设置指针时存储标志 - 例如,如下所示:
class classWithDynamicData {
private:
bool needToDelete;
char strData[];
public:
classWithDynamicData(int size) : needToDelete(true), strData(new char[size]) {
}
classWithDynamicData(char* data) : needToDelete(false), strData(data) {
}
~classWithDynamicData() {
if (needToDelete) delete[] strData;
}
...
// You need to define a copy constructor and an assignment operator
// to avoid violating the rule of three
};