这两行代码有什么区别和好处?

maf*_*ffo 4 c++ struct pointers list

我有两行代码,我想解释一下.你可以告诉我多少.主要是每个人的好处以及幕后发生的事情等等.

这里有两个结构作为例子:

struct Employee 
{
    std::string firstname, lastname;
    char middleInitial;
    Date hiringDate; // another struct, not important for example
    short department;
};

struct Manager
{
    Employee emp; // manager employee record
    list<Employee*>group; // people managed
};
Run Code Online (Sandbox Code Playgroud)

在上面的结构中使用哪两个更好,为什么?

list<Employee*>group;
list<Employee>group;
Run Code Online (Sandbox Code Playgroud)

Pra*_*ian 6

首先,std::list是一个双重链表.因此,这两个声明都创建了一个员工链表.

list<Employee*> group;
Run Code Online (Sandbox Code Playgroud)

这将创建一个指向Employee对象指针列表.在这种情况下,需要有一些其他代码来分配每个员工,然后才能将其添加到列表中.同样,每个员工必须单独删除,std :: list不会为您执行此操作.如果要与其他实体共享员工列表,这将是有意义的.将员工放在智能指针类中以防止内存泄漏可能会更好.就像是

typedef std::list<std::shared_ptr<Employee>> EmployeeList;
EmployeeList group;
Run Code Online (Sandbox Code Playgroud)

这条线

list<Employee>group;
Run Code Online (Sandbox Code Playgroud)

Employee按值创建对象列表.在这里,您可以在堆栈上构建Employee对象,将它们添加到列表中,而不必担心内存分配.如果员工列表未与其他任何内容共享,则这是有意义的.