我应该声明我的Vector<>作为Vector<> *?

时间:2012-11-08 05:50:16

标签: c++ pointers stl

假设我正在编写一个带有STL的C ++人员管理系统

我有一个名为StaffMember的实体类:

class StaffMember
{
  //
}

以及名为Staff的存储库:

class Staff
{
  private:
    std::vector<StaffMember> staffMembers;
}

我如何知道是否应将staffMembers声明为std::vector<StaffMember>std::vector<StaffMember>*

作为指针,我需要在~Staff()内删除它,否则我不会。

两者都有效,但问题是,我选择哪一个,并且在将来弹出这个问题时,我可以使用一般规则吗?

2 个答案:

答案 0 :(得分:2)

通常按值(std::vector<StaffMember>),除非您需要共享它。即使你确实需要共享它,智能指针也比原始指针要好得多。

编译防火墙是一个例外(例如PIMPL)。

答案 1 :(得分:1)

我会用这个:

// This means I have a vector (a list) of StaffMember pointers
std::vector<StaffMember *> myStaffMembers;

StaffMember *newStaffMember = new StaffMember();
myStaffMembers.push_back(newStaffMember);