如何定义我的类的析构函数中是否需要调用“delete []”作为指针?
指针(成员变量)可以指出在堆中分配的缓冲区,也可以指向不同时间的缓冲区(可以是只读存储器中的文字,也可以是放置在堆栈中的文字)。
解决它的最佳方法是什么?
我是否需要仅使用另一个标志,还是可以获取堆绑定(bind)的地址,并检查它们之间的缓冲区地址?
还是有更合理的方法?
最佳答案
您不能仅通过查看指针就知道指针是在自动存储区中,在静态存储器中还是在动态存储器中。您需要在设置指针时存储标志-例如,如下所示:
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
};
关于c++ - 定义放置C字符串的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16303147/