포인터를 매개 변수로 허용하는 함수가 있다고 가정하십시오. 이 함수는 std::vector<>::push_back()을 사용하여이 포인터의 수명주기를 관리하므로 예외가 발생할 수 있습니다. void manage(T *ptr);
과 같이 호출 : :이처럼 선언하면 manage(new T());
는 std::vector<>에 포인터를 밀어 예외가 발생하
std::stack::pop()I claimed에 대한 질문에서 pop 값을 반환하지 않는 이유는 예외 안전성 때문입니다 (복사 생성자가 throw하는 경우 어떻게됩니까?). @Konrad은 이제 의미 이동과 관련하여 더 이상 관련이 없다고 설명했습니다. 사실입니까? AFAIK, 이동 생성자 canthrow, 그러나 아마도 noexcept을 사용하면 여전히
이 방법이 안전하지 않습니까? #include <tr1/memory>
Foo * createFoo()
{
return new Foo(5);
}
int main()
{
std::tr1::shared_ptr<Foo> bar(create());
return 0;
}
또는 createFoo는 shared_ptr<Foo
std::unique_ptr<>()의 문서에서 포인터 초기화가 나에게 명확하지 않을 때 어떤 일이 발생할 수 있습니다. std::shared_ptr<>()을 할당 할 때 메모리 버퍼를 할당하여 참조 카운터를 처리합니다. 그래서 std::bad_alloc 예외가 발생할 수 있습니다. 고유 포인터를 초기화 할 때 비슷한 일이 발생할 수 있습니까? 나는 그것이