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
这样的容器,具体取决于用例。