나는이 유사한 수준의 설정이 : 당신이 볼 수 있듯이참조 객체 벡터?
class BlimpBase{
public:
virtual ~BlimpBase();
private:
virtual void lift()const = 0;
};
class Blimp: protected BlimpBase{
void lift()const;
};
class BlimpCarrier{
public:
add_blimp(BlimpBase& blimp);
private:
std::vector<BlimpBase* blimp> blimps;
};
을, 나는 다형성 비행선 클래스 세트를하고 난 (포인터를 사용하여 벡터의 "참조"라고 그때를 저장하기 위해 노력하고 있어요 벡터에 참조를 저장할 수 없다는 것을 깨닫기 만하면, 다른 방법을 설명하는 방법을 모르겠습니다. 문제는 이러한 객체의 대부분이 클래스 멤버로서 스택에 할당되지만이 벡터에이를 추가하여 직접 수정할 수 있다는 것입니다 (사본은 사용하지 않습니다). 이러한 객체에 대한 포인터를 유지하는 문제는 BlimpCarrier
이 (스택에 있기 때문에) 범위를 벗어나는 경우 매달린 포인터를 갖게된다는 것입니다. std::unique_ptr
과 std::shared_ptr
을 살펴 보았지만 여기서는 사용할 수 없다고 생각합니다 ...
스택에 할당하지 마십시오. –
@ PaulGriffiths : 이들은 클래스의 멤버이며이 배열을 통해 클래스를 참조하려고합니다. 나는 그들을 힙에 두는 것이 나를 도울 것이라고 생각하지 않는다. – Shokwav
shared_ptr로 클래스에 넣고 shared_ptr 또는 weak_ptr을 통해 벡터에서 참조하면 도움이된다. –