如何定义我的类的析构函数中是否需要调用“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/

10-11 15:53