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)
首先,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对象,将它们添加到列表中,而不必担心内存分配.如果员工列表未与其他任何内容共享,则这是有意义的.