11
shared_ptr
상속 된 클래스 간의 자동 typecasting에 몇 가지 문제가 있습니다.std :: shared_ptr 및 상속
내 클래스 구조는 다음과 같습니다. 기본 클래스 Base
및 두 개의 파생 클래스 Derived1
및 Derived2
입니다.
// Base class
class Base {
protected:
...
...
public:
Base() = default;
virtual ~Base() = default;
virtual void run() = 0;
...
...
};
// Derived class
class Derived1: Base {
protected:
...
...
public:
Derived1() = default;
virtual ~Derived1() = default;
void run() {...}
...
...
};
// Derived class
class Derived2: Base {
protected:
...
...
public:
Derived2() = default;
virtual ~Derived2() = default;
void run() {...}
...
...
};
나는 함수가 doSomething()
void doSomething(std::shared_ptr<Base> ptr) {
ptr->run();
...
}
난과 같이 파생 클래스와 함수를 호출이 -
doSomething(make_shared<Derived1>())
doSomething(make_shared<Derived2>())
하지만 내가 말하는 오류가 -
no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'
no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'
무엇 내가 틀렸어? 기본 유형에 static_pointer_cast
을 사용하는 것이 안전합니까? 마찬가지로 -
doSomething(static_pointer_cast<Base>(make_sahred<Derived2>()))
솔루션 내 나쁜 ... 문제는 내가 개인적으로 기본 클래스를 상속 한 것이 었습니다.
그것은 어떤 컴파일러를 사용합니까? 최신 Apple Clang에서 오류가 발생했습니다. – subzero
죄송합니다 ... 내 코드에서 클래스를 개인적으로 상속했습니다! 그것은 정말 신인 선수의 실수였습니다! – subzero
shared_ptr은 자동으로 (타입 변환없이) 기본 클래스 shared_ptr로 변환됩니까? 동일한 참조 횟수를 공유합니까? – abhiarora