2012-11-08 8 views
2

내가 STL와 C++ 직원 관리 시스템을 쓰고 있어요 가정 해 보겠습니다내 벡터 <>를 벡터 <> *로 선언해야합니까?

내가 가진 StaffMember라는 엔티티 클래스 :

class StaffMember 
{ 
    // 
} 

Staff라는 저장소 :

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

어떻게 알 수 있습니까 staffMembersstd::vector<StaffMember> 또는 std::vector<StaffMember>*으로 지정해야합니까?

포인터로, 나는 ~Staff() 안에 그것을 삭제해야 할 것입니다, 그렇지 않으면 그렇지 않을 것입니다.

두 가지 모두 작동하지만 질문은 내가 선택한 것이고 나중에이 질문이 나타날 때 사용할 수있는 일반적인 규칙이 있습니까?

+0

당신이 직접 말했습니다. 포인터는 특별히 언급 한 것 이상의 추가 작업이며, 특별한 이유가없는 경우 그 여분의 작업을하는 이유는 무엇입니까? – chris

+0

벡터는 모두 소문자로 편집 중입니다 ... – Jarryd

답변

2

을, 당신이 그것을 공유 할 필요가없는 경우. 공유 할 필요가 있더라도 스마트 포인터는 원시 포인터보다 훨씬 낫습니다.

컴파일 방화벽은 예외입니다 (예 : PIMPL).

1

나는 이것을 사용합니다 : 값 (std::vector<StaffMember>)에 의해 일반적으로

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

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

예, 벡터에 포인터가 있습니다 - 질문을 게시 한 직후에 더 이해할 수 있습니다. – user1002358

+0

@ user1002358, 다형성의 경우 스마트 포인터 벡터를 제안합니다. – chris

+3

흠, 나는 std :: vector > myStaffMembers를 선호한다. – billz

관련 문제