이 같은 unique_ptr
초기화 경우 : 문제는,표준 :: unique_ptr :: 재설정하고 생성자 예외
std::unique_ptr<Foo> i;
i.reset(new Foo());
하지만 예외가 Foo::Foo()
에서 발생됩니다 : 메모리 할당 무슨 일? unique_ptr이 유출되는 것을 어떻게 피합니까? 이것은 new
연산자 안에서 처리되는 것입니까?
소멸자는 범위가 종료 될 때 확실히 호출됩니다. reset
호출은 new Foo()
이 반환 될 때까지 호출되지 않으므로 예외가 생성자를 벗어날 때 할당 된 메모리를 해제하여 new
으로 처리해야합니다.
그런가요?
는'make_unique'이있는 경우 http://stackoverflow.com/questions/4094996/what-happens-to-the-memory-allocated-by-new-if-the-constructor-throws – Jon