定义放置c-string的位置

时间:2013-04-30 15:07:08

标签: c++ visual-c++ c-strings

如何定义我是否需要在我的类的析构函数中调用“delete []”作为指针? 指针(成员变量)可以指出在不同时间内在堆中分配的缓冲区(它可以是只读内存中的文字或放置在堆栈中的文字)。 解决它的最佳方法是什么? 我是否只需要使用另一个标志,或者可以获取堆边界的地址并检查它们之间是否有缓冲区地址? 还是有更合理的方式?

2 个答案:

答案 0 :(得分:2)

  1. 请勿使用动态分配的成员(使用std::string代替char *std::vector而非动态分配的数据成员)或
  2. 使用智能指针

答案 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
};