auto_ptr
을 사용하여 효과적으로 an article을 읽었습니다. - 실수로 오용을 방지하기auto_ptr에 원시 포인터 할당
// Example 10(c): Correct (finally!)
//
auto_ptr<String> f()
{
auto_ptr<String> result = new String;
*result = "some value";
cout << "some output";
return result; // rely on transfer of ownership;
// this can't throw
}
그러나이 내가 아는 한, auto_ptr
의 할당 연산자 만 rhs
같은 다른 auto_ptr
허용합니다 거기에, 다음 코드는 코드의 올바른 조각으로 제안했다. 그래서, 다음 라인은 기사의 오타가 되었습니까? 아니면 정말 일하기로되어 있습니까?
auto_ptr<String> result = new String;
당신이 맞습니다, +1. – jogojapan
하지만 치유 사의 (지금 삭제 된) 답변에 대한 귀하의 의견과 관련하여 : 물론 이것은 복사 생성자와 관련이 있습니다. 질문에 언급 된 초기화가 작동하지 않는 이유에 대한 귀하의 대답이 옳습니다. 그러나 이것이 복사 생성자와 관련된 복사 초기화라는 것이 또한 정확합니다. (복사 생성자에 대한 실제 호출은 멀리 떨어져 있지만, 다른 문제 일 수 있습니다.) – jogojapan
@jogojapan : 음, 매일 새로운 것을 배웁니다. 컴파일러가 호출 될 때 (컴파일러에서 멀리 떨어진 곳으로 최적화하기 전에) 더 많은 것을 설명 할 때 정확히 내가 어딘가에서 (표준보다 덜 합법적 인) 읽을 수 있습니까? – Cornstalks