C++ 指针列表和引用传递

C++ Pointer Lists and passage by reference

在下面的代码中,当我使用 ClassWithList 中的构造函数时,是否需要创建列表的实例?

还有,为什么addToList不对?我怎样才能做到这一点?

class AbstClass;
class ObjClass : AbstClass;

class ClassWithList
{
    std::list<AbstClass*> absts;
public:
    ClassWithList(); //new list?
    void addToList(ObjClass& obj)
    {
        list.push_back(obj);
    }



};

您声明了一个包含对象指针的列表

std::list<AbstClass*> absts;
          ^^^^^^^^^^

因此函数 addToList 应该接收指向 AbstClass *

类型对象的指针
void addToList(AbstClass *obj)
{
    absts.push_back(obj);
    ^^^^^
}

对于列表,当创建 class 的对象时,将隐式调用其默认构造函数。因此,您不必对 class 构造函数中的列表执行任何操作。

你要做一些简单的更正(评论中的解释):

class AbstClass;
class ObjClass : public AbstClass; // << You need to derive as public

class ClassWithList
{
    std::list<const AbstClass *> absts;
public:
    ClassWithList(); // You don't need new list, it will be allocated 
                     // already correctly at construction
    void addToList(const AbstClass& obj)
    {
        absts.insert(&obj); // << pass the address
     // ^^^^^ The member is named absts
    }
};