如果我有一个课程"电影"如下:(c ++)
class Movie{
private:
string name;
string year;
list<Employee ?> e;
}
有什么区别:
list<Employee *> e
list<Employee &> e
以及如何实现析构函数 〜每个变种的电影()?
答案 0 :(得分:2)
您不能拥有引用列表list<Employee &> e
,因为列表中的元素必须为Assignable,并且无法分配引用。
答案 1 :(得分:1)
您不能拥有对象的STL容器。也就是说,
std::list<Employee&> e;
没有机会编译。这归因于STL容器要求其元素为Erasable [注意:在C ++ 11之前,要求是CopyAssignable和CopyConstructible]。不幸的是,引用不是。
此外,由于您拥有C ++ 11标记,因此您应该意识到强烈建议不要使用原始指针来支持std::unique_ptr
和std::shared_ptr
等智能指针。因此,最好避免这种情况:
std::list<Employee*> e;
支持类似:
std::list<std::shared_ptr<Employee>> e;
答案 2 :(得分:0)
如评论list<Employee &> e
中所述,将无法编译。如果要对类进行引用而不是指针,可以使用list<std::reference_wrapper<Employee>> e
。类型必须是Assignable。