c – 无法删除std :: vector&std :: array?

c – 无法删除std :: vector&std :: array?,第1张

概述我的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; 我的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分配对象时,您将通过指针访问这些对象.这些指针是您稍后将要删除以销毁此类对象的指针.在此代码中,这些都不适用.

总结

以上是内存溢出为你收集整理的c – 无法删除std :: vector&std :: array?全部内容,希望文章能够帮你解决c – 无法删除std :: vector&std :: array?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存