c++ - 为什么当我使用“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
解决方案
因为您的指针 ( bufferX
, bufferY
) 对于构造函数是本地的asd
。这意味着它们在析构函数内或构造函数外的任何地方都不可见。
如果您必须使用原始指针,您可能希望将指针设为类成员。但在 C++ 中使用原始指针通常不是一个好主意。考虑使用std::vector
or std::array
。
如果必须使用char[]
,则考虑使用 C++14 智能指针,例如std::unique_ptr<char[]>
. 那你就不用担心调用delete了。一旦不再有任何引用,内存将自动释放。
例子:
std::unique_ptr<char[]> bufferX(new char[16]);
然后我们asd
被销毁,这块内存将被自动释放。
推荐阅读
- highcharts - Highcharts Tooltip 显示不同的数据
- android - 通过 SearchActivity 导航到另一个 Activity 的片段
- python - Google 幻灯片 API replaceAllShapesWithImage 返回 Google Drive 文件的错误 (2020)
- python - 使用日期修改 slug 的验证错误
- c# - ASP.Net 页面生命周期和动态控件
- javascript - 无法让 ANTLR(Javascript 目标)接受输入文件中的表情符号
- python - 在 2 个 ul 标签之间抓取数据
- oracle - oracle中的行号
- python - 更改初始加载的应用程序时,Django 没有在正确的模板文件夹中查找
- xamarin.forms - 在 NavigationBar 中放置 SearchBar 的最佳方式是什么?