我想删除向量中的指针,但我也想清空指针内容,以便它不存储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;
}
当我在擦除c
之后打印指针a
时,它仍然打印3
答案 0 :(得分:0)
听起来像您想要的是
delete v[0];
v[0] = nullptr;
答案 1 :(得分:0)
不确定要确切了解什么,但是...如Rusk所建议,使用C ++ 17可以使用智能指针。
这可以轻松解决向量的所有权和删除问题。
在我看来,您需要5.0 patchlevel 0
,setFilterModel
和std::shared_ptr
的共享指针(a
)和{ {1}}。
因此,只要(且仅当)至少有一个b
保持指针的所有权时,您才可以使用v
。
以下是没有std::weak_ptr
和c
的简化示例,其中c
重命名为std::shared_ptr
(用于“共享指针的向量”)和a
重命名为b
(用于“弱指针”)。
v