【问题标题】:How could I create a linked list of all objects that were ever created with that class?我怎样才能创建曾经用该类创建的所有对象的链接列表?
【发布时间】:2018-05-30 22:32:45
【问题描述】:

你好

我有 A 类,该类有构造函数、修改器方法、检查器方法等。我如何创建一个使用该类创建的所有对象的链接列表(所有对象我的意思是如果“新”对象被 mutator 方法更改,它也应该作为新对象链接)。如果可能的话,举个小例子。

【问题讨论】:

  • 使列表成为类的static 成员,然后在类的构造函数中将this 附加到它。
  • 别忘了从析构函数的列表中删除this
  • 请不要这样做。我敢肯定这是个坏主意。
  • “曾经”的要求有多强?您是否还想了解创建的每个临时对象?您是否正在尝试查找内存泄漏?我建议您重新考虑解决您真正要解决的问题的方法。

标签: c++ list class methods


【解决方案1】:

最简单的方法是使用静态列表,并从构造函数和析构函数对其进行修改。例如:

class A {
    static std::list<A *> s_instances;

public:
    A() { A::s_instances.push_back(this); }

    ~A() { A::s_instances.remove(this); }
};

【讨论】:

    【解决方案2】:

    以下是 Sid S 含义的示例:

    啊.h

    class A {
    public:
        A(vector<A*>& a_objects_vector) {
            a_objects_vector.push_back(this);
        }
        ~A(vector<A*>& a_objects_vector) {
            a_objects_vector.remove(this);
        }
    };
    

    ma​​in.cpp

    #include "A.h"
    
    int main() {
        vector<A*> all_a_objects;
        A a(all_a_objects), *a1 = new A(all_a_objects);
        /*Do your magic here...*/
        delete a1;
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-24
      • 2017-08-11
      • 2018-01-14
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2017-07-06
      相关资源
      最近更新 更多