如何在向量中释放指针?

时间:2018-10-20 01:53:00

标签: c++ pointers vector c++17 delete-operator

我想删除向量中的指针,但我也想清空指针内容,以便它不存储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

2 个答案:

答案 0 :(得分:0)

听起来像您想要的是

delete v[0];
v[0] = nullptr;

答案 1 :(得分:0)

不确定要确切了解什么,但是...如Rusk所建议,使用C ++ 17可以使用智能指针。

这可以轻松解决向量的所有权和删除问题。

在我看来,您需要5.0 patchlevel 0setFilterModelstd::shared_ptr的共享指针(a)和{ {1}}。

因此,只要(且仅当)至少有一个b保持指针的所有权时,您才可以使用v

以下是没有std::weak_ptrc的简化示例,其中c重命名为std::shared_ptr(用于“共享指针的向量”)和a重命名为b(用于“弱指针”)。

v