区别:list <object * =“”>和list <object&=“”>

时间:2015-12-08 18:33:57

标签: c++ pointers c++11

如果我有一个课程&#34;电影&#34;如下:(c ++)

class Movie{
private:
    string name; 
    string year; 
    list<Employee ?> e;
}

有什么区别:

list<Employee *> e  
list<Employee &> e  

以及如何实现析构函数 〜每个变种的电影()?

3 个答案:

答案 0 :(得分:2)

您不能拥有引用列表list<Employee &> e,因为列表中的元素必须为Assignable,并且无法分配引用。

答案 1 :(得分:1)

您不能拥有对象的STL容器。也就是说,

std::list<Employee&> e;

没有机会编译。这归因于STL容器要求其元素为Erasable [注意:在C ++ 11之前,要求是CopyAssignableCopyConstructible]。不幸的是,引用不是。

此外,由于您拥有C ++ 11标记,因此您应该意识到强烈建议不要使用原始指针来支持std::unique_ptrstd::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