为什么这不是更流行的习惯用法/模式?

#include <list>
class A {
  int data;
  static std::list<A*> glist;
public:
  A():data(0) {
    glist.push_back(this);
  }
  ~A() {
    glist.remove(this);
  }
};


就像一个安全网。您可以从指向它的任何指针中删除A的实例,列表将自行管理。这是否比创建单独的容器来跟踪您的A并在管理它们时出错会好得多?我想我从真正的基础上做了很多事情。但是我敢打赌,过去可以节省很多调试时间。

最佳答案

它不是线程安全的。有时您已经在维护对象列表了,不在乎。堆栈上的对象实际上并不需要在另一个容器中进行跟踪。它引入了可能不需要的类的新依赖关系。我敢肯定,还有很多其他原因我错过了。

如果使用shared_ptr或boost的ptr容器,那么对象管理问题就不成问题了。

09-10 04:17