gpt4 book ai didi

c++ - 堆上整数 vector 和释放内存

转载 作者:太空宇宙 更新时间:2023-11-04 15:47:24 26 4
gpt4 key购买 nike

我正在像这样在堆上创建一个整数 vector :

std::vector<int> vec = *new std::vector<int>();

然后我到了程序的末尾,我需要释放内存,但是使用 vec.clear()不会释放内存。

如何正确执行此操作?

谢谢,祝一切顺利-米切尔

最佳答案

How do I do this properly?

替换这个:

std::vector<int> vec = *new std::vector<int>();

有了这个:

std::vector<int> vec;

问题已解决。

与您可能遇到的其他语言不同,new 在大多数情况下最好避免使用。它动态分配对象,就像在其他语言中一样。但与其他语言不同,C++ 没有垃圾收集器,因此您需要手动销毁动态分配的对象。但是,您编写代码的方式使这成为不可能。

您正在使用 new 动态分配一个对象,它返回一个指向该对象的指针。然后您将取消对该指针的引用(通过 *),并将该对象复制到 vecvec 被正确销毁,但从中复制它的动态分配对象却没有。由于您没有存储该指针,因此您无法访问该对象,也无法处置它。为了销毁该对象,您必须像这样捕获指针:

std::vector<int>* vec_pointer = new std::vector<int>();

然后,您可以在指针上调用 delete,这会破坏对象并释放内存:

delete vec_pointer;

值得庆幸的是,动态分配并不像其他语言那样是必需的。声明一个对象会创建它,当它超出范围时会被销毁。所以我向您展示的简单代码行就足够了,不需要 delete 语句。

附带说明一下,如果您出于某种原因确定必须进行动态分配。使用智能指针(谷歌那个)。

关于c++ - 堆上整数 vector 和释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com