eja*_*ang 3 c++ arrays stl vector
我的C++类有一个析构函数,它试图删除std :: vector和std :: array实例变量.
#include <iostream>
#include <vector>
#include <array>
int main()
{
std::array<int, 3> foo;
std::vector< std::array<float, 4> > vertices;
foo[0] = 1;
foo[1] = 2;
foo[2] = 3;
std::cout << foo[0] << std::endl;
delete foo;
delete vertices;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何正确释放内存 - 为什么我不能删除这些变量?
clang++ -std=c++11 -stdlib=libc++ -Weverything ccc.cpp
ccc.cpp:14:2: error: cannot delete expression of type 'std::array<int, 3>'
delete foo;
^ ~~~
ccc.cpp:15:2: error: cannot delete expression of type 'std::vector<std::array<float, 4>
>'
delete vertices;
^ ~~~~~~~~
ccc.cpp:18:2: warning: C++98 requires newline at end of file [-Wc++98-compat-pedantic]
}
^
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 15
删除这些变量?您应该选择的唯一"变量" delete是您分配的变量new.你new在这段代码中分配了什么吗?不,所以,不要试图做delete任何事情.
对象foo和vertices具有自动存储持续时间的本地对象.这些对象的内存会自动分配并自动释放.你不能自己做.这完全超出您的控制范围.
如果要手动控制内存分配,则必须使用动态创建这些对象new.例如
std::array<int, 3> *foo = new std::array<int, 3>();
...
(*foo)[0] = 1;
(*foo)[1] = 2;
(*foo)[2] = 3;
...
delete foo;
Run Code Online (Sandbox Code Playgroud)
以上将有效.但是没有真正的理由在你的例子中涉及动态内存.使用自动对象,它的工作原理非常好.只是停止尝试delete他们.
delete期望指针作为参数.当您通过分配对象时new,您将通过指针访问这些对象.这些指针是您稍后将传递delete给销毁此类对象的指针.在此代码中,这些都不适用.
| 归档时间: |
|
| 查看次数: |
13505 次 |
| 最近记录: |