2009-05-19 5 views
0

다른 클래스를 참조하는 클래스가 있습니다. 이 참조를 점진적으로 추가 할 수 있기를 원합니다 (즉, 동시에 생성자에서 모두가 아닌). 클래스에서 이러한 참조를 기본으로하는 객체를 삭제하는 기능을 허용하지 않으려합니다. 또한 NULL을 테스트합니다. 이 참조에 대해서는 특정 참조가 추가되지 않았다는 것을 알고 있습니다. 이러한 요구 사항을 달성하기위한 좋은 설계는 무엇입니까?클래스에서 여러 참조를 가장 잘 처리하는 방법

+0

좀 더 구체적으로 알려주시겠습니까? –

+2

포인터를 설명하는 것 같습니다. boost :: shared_ptr (및 다른 스마트 포인터 유형)을 고려하십시오. 하지만 "개체 삭제 기능을 허용하지 않음"이라는 의미가 확실하지 않습니다. 참조가있는 경우 컴파일러에서 "&blah; 삭제"를 입력하는 것을 멈출 수 없습니다. –

+1

사실. 포인터를 사용하지 않는 이유는 무엇입니까? – aib

답변

1

나는 boost::shared_ptr을 사용해야한다는 다른 의견에 동의합니다.

그러나 참조 할 개체의 수명을 부분 제어하는 ​​클래스를 원하지 않으면 참조를 보유하기 위해 boost::weak_ptr을 사용하는 것이 좋습니다. 그런 다음 참조를 유지하려면 참조 번호를 shared_ptr으로 바꾸십시오. 이렇게하면 참조 된 객체가 클래스보다 먼저 삭제되고 객체를 사용하기 전에 객체가 삭제되었는지 항상 알 수 있습니다.

0

refcounted 클래스를 사용하면 기본 클래스가 삭제 될 때까지 참조가 관리되지 않아야합니다.

0

당신은 대부분 boost::shared_ptr을 찾고 있습니다.

0

boost :; shared_pointer를 사용하는 모든 권장 사항에도 불구하고 클래스에 소유권 의미가없는 것처럼 보이기 때문에 게시물에서 적절하지 않을 수 있습니다. 보통의 C++ 포인터는 여기에서 잘 동작합니다.

스마트 포인터는 어떤 형태로든 기본 벙어리 포인터에 대한 액세스를 제공해야하므로 스마트 포인터를 통한 삭제를 방지하기는 어렵지만 물론 항상 삭제할 수 있습니다. 일부 문제의 경우 기술 솔루션이 없으며이 경우 코드 검토는 포함 된 포인터를 사용하여 의미 론적 오류를 감지하는 가장 좋은 방법입니다.

0

참조하려는 개체는 다음과 같이 파생 될 수 있습니다. 그러면 삭제할 수 없습니다. NonDeletable

클래스 T 클래스 : 공공 T는 { 개인 : 무효 연산자 (무효 *)를 삭제; };

관련 문제