c++ - 为什么要在实例替换 vector 中删除?

标签 c++ pointers vector delete-operator

这不是一个实际问题,只是出于教育好奇心。

我刚刚在某个论坛上找到了这段代码:

std::vector<MyClass*> myvec;
for(unsigned int i = 0; i < 100; ++i) {
  myvec.push_back(new MyClass( foo1 ));
}

// somewhere in the code inside a particular if statement
MyClass* replacement = new MyClass( foo2 );
delete myvec[0];
myvec[0] = replacement;

我有一个 MyClass 实例 vector ,在代码的某处我必须用其他实例替换一些实例。

为什么我必须调用删除?替换指针还不够吗?

我学到了什么:

最佳答案

如果你不这样做 delete原来MyClass ,它会留在附近但无法访问,因为您删除了指向它的指针。那是一个 memory leak .

请注意,如果任何 new初始分配中的表达式(第一个除外)抛出,然后你泄漏了先前分配的元素。

所有这些都可以通过不使用 vector 来避免。指针,但一个简单的 std::vector<MyClass> ,或者如果确实需要,也可以使用智能指针。

关于c++ - 为什么要在实例替换 vector 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9499316/

相关文章:

对象指针的 C++ 内存分配

vector - VHDL如何使用std_logic_vector作为数组的索引

c++ - 通过引用传递 vector 内联

vector - 使用来自 gensim 的预训练向量的 torch 嵌入层的预期输入

c - 使用结构体数组进行选择排序,使用 strcmp 进行排序

c++ - 用于存储指针的线程安全循环缓冲区

java - 无法将 Android WebView 渲染为 C++ 和 Java 代码之间共享的外部纹理

c++ - 在 Linux 上计时共享库加载时间

c++ - OpenCV GTK+2.x 错误 - "Unspecified error (The function is not implemented...)"

c++ - Visual Studio 2015 更新 1 C++ "The breakpoint failed to bind"