2013-05-10 2 views
0

누군가 올바른 방향으로 나를 가리 키도록하십시오. 나는 "정적"(단일 인스턴스) std :: list를 원한다. 그래서 std :: list는 아래 보이는 "Container"구조의 인스턴스를 가진 모든 객체 내에서 공유된다. 그러나 구조 내의 다른 모든 요소는 각 인스턴스마다 고유해야합니다.파생 된 public static std :: list

여기서 파생 된 std :: list에 키워드 "static"을 삽입할까요?

아래의 키워드 "static"은 잘못 배치되어 있습니다.이 경우 어디에 있어야하는지 모르기 때문입니다.

+2

표준 컨테이너에서 상속하지 마십시오. 그들은 그것을 위해 설계되지 않았습니다. –

+2

C++은 이러한 종류의 상속을 지원하지 않습니다. f # $ k 감사합니다. –

+0

왜 정적 공개 목록을 원하십니까? 이것에 대한 디자인 근거는 무엇입니까? –

답변

7

여기에는 상속 할 필요가 없습니다. 그것을 할 수있는 가장 좋은 방법은 정적 멤버 것입니다 :

struct Container { 
    static std::list<int> list_; 
} 

정적 상속뿐만 아니라 없습니다를, 그래서 내부의 정적 목록을 수정할 것이라고 자신 get, insert, remove 방법을 구현하기 위해 제안 할 것입니다.

+0

이것이 올바른 방법이라고 동의하지만 엄밀히 말하면 이것을 구성이라고해야합니까? – BoBTFish

+0

좋아요, 삭제 된 구성 – nogard

+0

나는 그것이 잘못되었다고 불평하지 않았습니다. 그것은 내가 대답을 알지 못하는 순전히 학문적 인 질문이었습니다. – BoBTFish

1

std::list에서 상속하면 안됩니다. 대신 하나의 정적 멤버 원하는처럼 대신이 보인다. 멤버 변수 static을함으로써

class Container 
{ 
    static std::list<int> SingleList; 

    // ... 
} 

을이 선언 년대 클래스의 모든 인스턴스가 공유하는 변수의 하나의 인스턴스가, 거기 그냥 당신이 원하는 좋아 .

+0

고마워. 위에서 게시했습니다. 나는 당신의 제안에서 이전 방법을 시도했다. 그러나, 나는 : :: 인스턴스 중 하나에서 구조 내의 목록을 반복하는 방법을 모르겠습니다. 어떻게 보여 주시겠습니까? 내가해야 할 일 : Container myContainer; 목록 :: iterator niContainer (myContainer.list_.begin()); –

+0

@ 8-bitButterfly : 댓글은 "follow-up questions"가 아니라 설명 및 청 신동 newbs 요청을위한 것입니다. –

+0

Darn. 좋아, 다른 질문을 입력하러 갈거야 ... –

0

정적 회원이 귀하의 사례에 적합한 것으로 생각합니다.

struct Container 
{ 
public: 
    Container() 
    {} 

    ~Container() 
    {} 

public: 
    static std::list<int*> Handles; 
}; // struct 
+3

비 정적 핸들리스트를 가지고 싶었던 정적 인 int리스트와 혼합했다 ... – leemes

0

다른 사람이 말했듯이, 표준 컨테이너에서 상속하는 것은 나쁜이며, 표준 컨테이너 더 virtual 소멸자가 정의되지 가지고 있기 때문에이 나쁜 이유입니다. 즉, 파기시 파생 된 객체를 올바르게 파기하지 않고 기본 포인터를 통해 파기하려고 시도합니다.

Base* b = new derived(); 

// do stuff 

delete b; // will not destroy derived properly because base has no virtual destructor. 
+2

_Actually_, 참조 나 부모 포인터로의 파기시 ** [정의되지 않은 동작 ** ('[C++ 11 : 5.3.5/3]')] (http://stackoverflow.com/questions/2065938/virtual-destructor-is-it-required-when-not-dynamically-allocated-memory). –

+0

@Angew : 파생 _is_ 하위. Tony는 "base"와 "child"를 사용했습니다. 당신은 "부모"와 "파생 된"을 사용했습니다. 두 분 모두 사실 용어를 올바르게 사용 하셨지만 왜 대칭 적이 지 않고 "기본/파생"에 충실합니까? –

+0

@LightnessRacesinOrbit 편집 내역보기 - 내 의견은 첫 번째 편집 전에 왔습니다. 나는 그것을 제거 할 것이고, 그것은 이제 불필요한 것이다. – Angew

관련 문제