首页 > 解决方案 > 为什么当我使用“new”关键字声明数组指针时无法删除它

问题描述

我不知道这是否是正确的标题,但有人可以向我解释为什么会这样吗?

class asd {
public:
    asd() {
        const char* bufferX = new char[16];
        const char* bufferY = new char[16];
        const char Player = 'O';
    }

    ~asd() {
        delete[] bufferX;
        delete[] bufferY;
    }
};

我收到此错误:identifier "bufferY" is undefined

标签: c++

解决方案


因为您的指针 ( bufferX, bufferY) 对于构造函数是本地的asd。这意味着它们在析构函数内或构造函数外的任何地方都不可见。

如果您必须使用原始指针,您可能希望将指针设为类成员。但在 C++ 中使用原始指针通常不是一个好主意。考虑使用std::vectoror std::array

如果必须使用char[],则考虑使用 C++14 智能指针,例如std::unique_ptr<char[]>. 那你就不用担心调用delete了。一旦不再有任何引用,内存将自动释放。

例子:

std::unique_ptr<char[]> bufferX(new char[16]);

然后我们asd被销毁,这块内存将被自动释放。


推荐阅读