C++指针列表和引用的段落

C++ Pointer Lists and passage by reference

本文关键字:段落 引用 指针 列表 C++      更新时间:2023-10-16

在下面的代码中,当我使用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);
    }

};

您必须做一些简单的更正(注释中的解释):

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
    }
};

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

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

因此,函数addToList应该接收指向类型为AbstClass * 的对象的指针

void addToList(AbstClass *obj)
{
    absts.push_back(obj);
    ^^^^^
}

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