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