为什么要删除实例转换的向量?

nki*_*int 1 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;
Run Code Online (Sandbox Code Playgroud)

我有一个MyClass实例的向量,在代码中的某处我必须用其他实例替换某些实例.

为什么我要拨打删除?更换指针不够吗?

我学到了什么:

Fre*_*Foo 5

如果你没有delete原件MyClass,它会留在周围,但是无法访问,因为你擦了指针.那是内存泄漏.

请注意,如果new初始分配中的任何表达式(第一个除外)抛出,那么您将泄漏先前分配的元素.

所有这一切都可以通过不使用vector指针而不是简单std::vector<MyClass>,或者如果你真的需要使用智能指针来避免.