다음 작업을 수행 할 수 있습니까? 분명히 호출자는 알몸 포인터를 삭제할 수 없습니다. shared_ptr을 사용하고 shared_ptr을 반환해야합니까? 이것 때문에 너무 무거워 보입니다.클래스의 unique_ptr에 알몸 포인터를 반환하는 것이 좋습니다.
class A
{
B* GetB() { return pointer.get(); }
private:
unique_ptr<B> pointer;
};
다음 작업을 수행 할 수 있습니까? 분명히 호출자는 알몸 포인터를 삭제할 수 없습니다. shared_ptr을 사용하고 shared_ptr을 반환해야합니까? 이것 때문에 너무 무거워 보입니다.클래스의 unique_ptr에 알몸 포인터를 반환하는 것이 좋습니다.
class A
{
B* GetB() { return pointer.get(); }
private:
unique_ptr<B> pointer;
};
나는 그것이로는 포인터가 delete
D 의도되지 않는 문서에 분명히하고, 잘 작동해야한다고 생각합니다.
여전히 참조를 반환합니다.이 경우 발신자가 delete
이 아니어야한다는 암시가 있습니다.
class A
{
B & GetB() { return *(pointer.get()); }
private:
unique_ptr<B> pointer;
};
편집이 포인터가 NULL
될 수 있음을 밝혀; 이 경우 참조는 피해야합니다.
당신 은 단지 포인터를 캡슐화 스마트 바보 do_not_delete_me_ptr
클래스의 어떤 종류를 작성하고 당신이 그것을 삭제하지해야 여분 명확하게,하지만 난이 너무 지나친 생각 할 수있다. ;) unique_ptr
에 부스트 워드 프로세서
문제는 null이 될 수있는 객체입니다 –
그러면 포인터가 적합합니다. –
@Sriram : 그렇다면 'NULL'포인터를 역 참조하는 것 (심지어 참조를 작성하는 것까지)이 UB이기 때문에 참조가 확실히 선택되지 않습니다. 이 물건에 대해'shared_ptr'을 사용하여 벌거 벗은 포인터 + doc 경고를하고 싶습니다. * way * overkill입니다. –
:
unique_ptr은 CopyConstructible (복사 가능 생성자)이 아니며 CopyAssignable 그러나 그것은 MoveConstructible이며, 입주 지정 가능.
unique_ptr
은 사본을 회원으로 유지하기 때문에 반환 할 수 없습니다.
개체의 할당이 보장되면 포인터가 null이 아니므로 참조를 반환합니다.
그는 'unique_ptr'을 반환하지 않고,'unique_ptr '이 캡슐화하고있는 포인터를 반환합니다. –
죄송합니다. 내 대답을 잘못 표현했습니다. 이 문제가 해결되어야합니다. –
é : 이제 괜찮습니다. :) –
분명히, 배수가 공존하기를 원하는 것처럼 더 이상 고유 한 포인터가 없습니다. 나는 내 가정에 의문을 제기하는 것으로 시작할 것입니다. –