cpp reference는shared_from_this 및 개인 상속
class Good : std::enable_shared_from_this<Good>
{
public: std::shared_ptr<Good> getptr() { return shared_from_this(); }
};
...
auto good = std::make_shared<Good>();
good->getptr();
그러나이 Visual Studio에서 작동하지 않는다 (약간 조정) std::enable_shared_from_this
를 사용하는 방법이 예제를 가지고 2015 년 (엔터프라이즈 버전 14.0.25123.00 업데이트 2), 즉, std::bad_weak_ptr
예외가 발생합니다.
은 (cpp reference 또는 Microsoft 다른 사람을 포함한) 다른 예를 보면 나는 그들이 대신 private
하나의 public
상속을 사용하는 것으로 나타났습니다. 그리고 public
상속을 사용하면 실제로 내 문제가 해결됩니다 (아니 std::bad_weak_ptr
더 이상 유효하지만 대신 shared_ptr
).
Cpp 참조는 공개적으로 std::enable_shared_from_this
에서 상속해야한다는 언급이 없으므로 어디에 오류가 있습니까? Visual Studio의 동작이 잘못 되었습니까 (private
상속을 사용할 때 가시성 문제가있는 것 같습니까?) 또는이 제한을 언급하지 못한 cpp 참조가 있습니까?
PS : make_shared<good>()
또는 shared_ptr<Good>(new Good)
은 차이가 없습니다.
PSS : 두 버전 모두 제대로 컴파일되지만 사적인 버전은 제대로 작동하지 않으므로 매우 불쾌한 버그가 발생합니다.
편집 : struct
에서 class
으로 변경. Cpp 참조는 실제로 해당 예제에서 공용 상속을 사용합니다. 아직 공개되어야한다는 말은 없습니다. 실제로 목록에 나와 있습니다. 단지 신중하게 읽는 법을 배워야합니다. @Angew 감사합니다.
가능한 복제 (HTTP : // 유래 .com/questions/27697973/shared-from-this-causing-bad-weak-ptr) –
@ πάνταῥε other 다른 질문에 다른 근본 원인이있다. –
@PiotrSkotnicki 나는 그것을 망치지 않았다. –