c – 无法删除std :: vector&std :: array?
发布时间:2020-12-16 10:25:07 所属栏目:百科 来源:网络整理
导读:我的C类有一个析构函数,它试图删除std :: vector和std :: array实例变量. #include iostream#include vector#include arrayint main(){ std::arrayint,3 foo; std::vector std::arrayfloat,4 vertices; foo[0] = 1; foo[1] = 2; foo[2] = 3; std::cout foo[0
我的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; } 我不确定如何正确释放内存 – 为什么我不能删除这些变量? 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] } ^ 解决方法
删除这些变量?您应删除的唯一“变量”是您分配的新变量.您是否在此代码中按新分配了任何内容?不,所以,不要试图删除任何东西.
对象foo和顶点是具有自动存储持续时间的本地对象.这些对象的内存会自动分配并自动释放.你不能自己做.这完全超出您的控制范围. 如果要手动控制内存分配,则必须使用new动态创建这些对象.例如 std::array<int,3> *foo = new std::array<int,3>(); ... (*foo)[0] = 1; (*foo)[1] = 2; (*foo)[2] = 3; ... delete foo; 以上将有效.但是没有真正的理由在你的例子中涉及动态内存.使用自动对象,它的工作原理非常好.只是停止尝试删除它们. delete期望指针作为参数.当您通过new分配对象时,您将通过指针访问这些对象.这些指针是您稍后将要删除以销毁此类对象的指针.在此代码中,这些都不适用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储
- crm使用FetchXml分组聚合查询
- c# – 如何用mysql填充gridview?
- XML---android解析XML总结(SAX、Pull、Dom三种方式)
- PostgreSQL源码修改 ——查询优化(一)
- frame外弹出,刷新父页面
- ruby – 如何使用Nokogiri和Builder从父元素继承命名空间?
- datatable 动态更ajax换数据源展示? fnReloadAjax||datata
- ruby-on-rails-3 – 在amazon-s3中的Errno :: ENOENT(没有这
- Cocos2d Lua开发环境完全搭建