【发布时间】:2018-10-20 01:53:00
【问题描述】:
我想擦除向量中的一个指针,但我也想清空指针内容,这样它就不会存储A 对象并删除指针
#include <iostream>
#include <vector>
class A {
private:
int a;
public:
A(int a): a(a){}
int getValue(){return a;}
};
int main(int argc, char const *argv[]) {
auto a (new A(3));
auto b (new A(4));
A *c = a;
std::cout << "Pointer a: " << a << '\n';
std::cout << "Pointer b: " << b << '\n';
std::cout << "Pointer c: " << c << '\n';
std::vector<A*> v = {a, b};
for (auto i : v)
std::cout << i << " ";
std::cout << '\n';
v.erase(v.begin());
std::cout << "Pointer c: " << c->getValue() << '\n';
for (auto i : v)
std::cout << i << " ";
std::cout << '\n';
return 0;
}
当我在擦除 a 后打印指针 c 时,它仍然打印 3
【问题讨论】:
-
v.erase()从向量中移除指针,但不调用delete。 -
是的,但我怎样才能释放向量中的指针并将其内容设置为 nullptr?
-
你之前调用过
delete(例如delete *v.begin();)。我不知道您所说的“将其内容设置为nullptr”是什么意思。 -
每当我删除一个指针时,我都会写
delete p;,然后写p = nulltpr;,所以当我打印p时,它会打印0x0。 -
写入
*v.begin() = nullptr;不会影响原始指针变量,因为您在向量中存储了该指针的副本。
标签: c++ pointers vector c++17 delete-operator