c++ - 删除 vector 中携带的对象?

标签 c++ memory-management vector

在 C++ 应用程序中,我使用 operator new 在特定类 Vehicle 的类 User 对象的各个点创建,并在每次实例化后立即将它们放入一个 vector 中,该 vector 是第一类的属性(即 vector< Vehicle* > v1 ) .

  1. 在程序运行时,我可能需要在某个时候删除 Vehicle 类的对象。我应该绝对使用运算符删除吗?如果是这样,如何对 vector 执行此操作? vector 是否有任何预定义的功能来完成相同的工作?当我删除它们时, Vehicle 类的属性会发生什么变化,在这种情况下是指向其他对象的指针?他们也被删除了吗?

  2. 如果直到程序结束才需要删除它们,它们是被析构函数删除还是应该“手动”删除它们?

最佳答案

这是 C++ 的方式:

#include <memory>
#include <vector>

#include "vehicle.hpp"
typedef std::vector<std::unique_ptr<Vehicle>> vehicle_container;

#include "derivedvehicles.hpp"

int main()
{
    vehicle_container v;
    //...
    v.emplace_back(new Car);
    v.emplace_back(new Bike);
    //...
 } // baam, everything is cleaned up

关于c++ - 删除 vector 中携带的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547079/

相关文章:

c++如何创建仿函数的std::vector

c++ - 如何从 ifstream 加载 LLVM 位码文件?

java - 哪一项指示了 java 应用程序的确切内存使用情况

haskell - 如何在 Haskell 中对手动分配的数据进行垃圾收集?

c++ - Vector of Vector 如何在内存中对齐?

c++ - 使用 auto 关键字填充双索引 vector

c++ - 通过mexfunction从C++将int类型的N个 vector 返回到matlab?

java - 使用 Java 将对象添加到 Vector 会丢失引用?

android - eclipse 中没有 std::find() 的匹配函数。在 XCode 中运行良好

c++ - 访问冲突读取位置 0xcdcdcdd5