클래스를 생성자에서 인수로 전달할 때 대부분 포인터가 전달됩니다. 추상 기본 클래스를 멤버로 처리 할 때 소유권 문제
// Abstract class A
class A {
virtual void foo() = 0;
};
class B : public A {
void foo();
};
class C {
public:
C(A* a) : _a(a) {};
private:
A* _a;
};
: 그 주된 이유는 여기에
은 예입니다 ... 내가 인스턴스화 할 수없는 추상 클래스를 통과해야하고, 참고로 난 정말 선택의 여지가 없어 null 일 수 없습니다입니다
어떤 경우에는 C
이 A
개체를 처리하기를 원합니다 (삭제할 때 삭제). C
은 A
개체를 삭제하지 않고 _a
을 삭제하려고합니다.
사운드 프로그래밍 방법론을 사용하는 모범 사례는 무엇입니까?
참조를 사용하십시오. '보기 전용 - 소유권 없음'을 표현할 때 정말 빛납니다. 실제로 null 값이 필요하면'boost :: optional'을 사용할 수 있습니다. –
불행히도 추상 클래스에 대한 참조를 사용할 수 없습니다. 부스트 기능은 확실히 훌륭하지만 지금은 직장에서 사용할 수 없습니다. 문제를 해결할 순수 C++ 기능이 있습니까? – vanna
당신은 확실히 [can] (http://ideone.com/fVwq7) 참조를 사용합니다. –