【问题标题】:Should I declare my Vector<> as a Vector<>*?我应该将我的 Vector<> 声明为 Vector<>* 吗?
【发布时间】:2012-11-08 05:50:16
【问题描述】:

假设我正在用 STL 编写一个 C++ 员工管理系统

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

class StaffMember
{
  //
}

还有一个名为Staff的存储库:

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

我如何知道我应该将staffMembers 声明为std::vector&lt;StaffMember&gt; 还是std::vector&lt;StaffMember&gt;*

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

两者都可以,但问题是,我应该选择哪一个?当这个问题将来出现时,我可以使用一个通用规则吗?

【问题讨论】:

  • 你自己说的。指针是额外的工作(甚至超出了你提到的),如果你没有使用它的具体原因,你为什么要做这些额外的工作?
  • vector全小写,正在编辑中...

标签: c++ pointers stl


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我会用这个:

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

    【讨论】:

    • 是的,我在 Vector 中有指针 - 在我发布问题后我意识到这更有意义。
    • @user1002358,在多态的情况下,我建议使用智能指针向量。
    • 嗯,我更喜欢 std::vector<:shared_ptr>> myStaffMembers;
    • 这不是“更喜欢”shared_ptr 的问题,而是正确性的问题。 =P 这里的代码不是异常安全的。
    • 您为什么更愿意将StaffMember 指针放在值之上?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多