std :: unique_ptr에 문제가 있습니다. 나는 그들을 이해했다고 생각했지만 명확하게 이해하지 못했습니다.std :: unique_ptr과 관련된 오류
나는 다음과 같은 코드가 있습니다 :
X::X() : m_foo(nullptr),
{
m_foo = std::unique_ptr<Foo>(new Foo());
}
X::X(Foo* foo) : m_foo(nullptr),
{
m_foo = std::unique_ptr<Foo>(foo);
}
std::unique_ptr<Foo> m_foo;
다음과 같이 나는 X를 구성 할 때 : 포인터가 해제되고 있었다 :
Foo foo;
X x(&foo);
내가 객체 0x101f7eec0에 대한 오류 '고 말해 런타임 오류가 발생합니다 할당되지 않음 '. 다음
단, I는 X를 구성 :
가Foo foo;
X x;
이러한 오류가 발생하지 않는다. 나는 다음과 같은 소멸자를 추가하는 경우
는 :
X::~X()
{
m_foo.release();
}
모든 확인을 작동합니다.
왜 처음에는 오류가 발생하는지, 왜 foo를 해제하면 오류가 없어지는지 잘 모르겠습니다.
누군가 설명해주십시오.
, 당신은 nullptr''에'm_foo'를 초기화 한 후 새로 지어진'표준을 할당 할 필요가 없습니다 :: unique_ptr'. 적절한 포인터로'm_foo (new Foo())'와'm_foo (foo)'를 사용하여'm_foo'를 즉시 초기화 할 수 있습니다. 명시 적 멤버 이니셜 라이저의 전체적인 점은 멤버 구성 후 할당 된 반 패턴을 피하는 것입니다. –
user4815162342