Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我能';当我用';新';关键词_C++ - Fatal编程技术网

C++ 为什么我能';当我用';新';关键词

C++ 为什么我能';当我用';新';关键词,c++,C++,我不知道这是不是正确的标题,但有人能解释一下为什么会发生这种情况吗 class asd { public: asd() { const char* bufferX = new char[16]; const char* bufferY = new char[16]; const char Player = 'O'; } ~asd() { delete[] bufferX; delete[]

我不知道这是不是正确的标题,但有人能解释一下为什么会发生这种情况吗

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;
    }
};
我得到了这个错误:
标识符“bufferY”未定义,因为您的指针(
bufferX
bufferY
)是
asd
构造函数的本地指针。这意味着它们在析构函数内或构造函数外的任何位置都不可见

如果必须使用原始指针,则可能需要使指针成为类成员。但是在C++中使用原始指针通常是个坏主意。考虑使用<代码> STD::向量< /代码>或<代码> STD::数组< /代码> ./P>

如果您必须使用<代码> char []/COD>,那么考虑使用C++ 14智能指针,如:代码> STD::UnQuyJPPT。那么您就不必担心调用delete了。一旦不再有任何引用,内存将自动释放

例如:

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

然后,asd将被销毁,该内存将自动释放。

您的bufferX和bufferY变量不会声明为类成员,而是声明为asd()函数/构造函数中的变量,并且在该函数退出时将被删除

如果要保留它们,应该将它们声明为类成员

另外,请不要将代码作为图片发布,这会使您更难获得帮助

class asd
{
    public:
    const char *bufferX, *bufferY;
    const char Player = '0';

    asd()
    {
        bufferX= new char[16];
        bufferY= new char[16];
    }

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

在声明变量名的范围之外,无法访问该变量名。你是想成为班级成员吗?你应该在这里发布代码,而不是附加屏幕截图。对不起,@ODYN Kon我不知道,我认为作为一个团队发布代码会更容易screenshot@xXTurner发布代码而不是截图的原因是,当其他人将来来到这里时,他们不必去其他网站了解你的问题(或答案)。您的图像可能不会永远可用。@xXTurner谢谢,关于图像,我认为会更容易,但将来我会知道。您可能不想成为指针类成员。你如何证明使用指针是合理的,比如说,
std::array
?它们不是“已删除”,只是变得不可访问。@BenVoigt指针将被“删除”,是分配的内存将保留但不可访问,我应该指定它。@f9t0:指针将被销毁,是的。但是“delete”意味着更多,比如调用
operator delete()
deallocation函数。那不会发生。不是指针指向什么,也不是指针本身的存储。您可能不想让指针成为类成员。你如何证明使用指针,例如,代码> STD::数组< /COD>?@ BaMuMuGuang:我还没有C++的经验。我不知道。谢谢大家!@在C++中,拥有原始指针的XXTURNER通常是个坏主意。更喜欢像
std::vector
std::array
这样的容器,具体取决于用例。