내 클래스의 모든 사용 사례를 잘 모르기 때문에 사용할 스마트 포인터 유형이 확실하지 않은 상황에 처해 있습니다. 공유 포인터를 사용할 수는 있지만 공유 소유권이 꼭 필요한 것은 아니지만 코드에서 공유 포인터를 도처에 전달할 생각이 들지 않습니다. This article Herb Sutter의 말에 의심 스러우면 unique_ptr을 사용하고해야 할 때 shared_ptr로 변환하십시오. 이것은 내가하고 싶은 것입니다 만,이 예제를 고려해이 작업을 수행 할 것으로 예상되는 방법으로 나는 분명 해요 :shared_ptr 및 unique_ptr 변환
class Example
{
public:
Example(): _ptr(std::make_unique<Node>()) {}
std::unique_ptr<Node>& getPtr()
{
return _ptr;
}
private:
// I am unsure if I will eventually need shared ownership or not
std::unique_ptr<Node> _ptr;
};
Example* example = new Example();
// Some function somewhere
void f()
{
// I've decided I need shared ownership, converting
std::shared_ptr<Node> ptr(std::move(example->getPtr()));
// Oops, example is no longer valid...
}
사람이 내가 같은 상황에 대처하는 방법의 더 나은 아이디어가있는 경우 그것을 듣게되어 기쁩니다. 다음과 같이
unique_ptr 및 shared_ptr은 관련된 메모리의 OWNERSHIP에 대한 것이며 간단한 사용에는 해당되지 않습니다. 일반적으로 shared_ptr은 보통 포인터/참조와 비교하여 상대적으로 값이 비싸지 않으므로 전달하지 마십시오. – xaxxon
'Example' *은 항상 노드에 대한 소유권을 유지할 필요가 있으며 때로는 다른 객체도 해당 노드의 소유권을 필요로합니까? – jaggedSpire
위의 예에서 포인터가 소유권을 공유하고자 할 때 포인터가 'shared_ptr'이어야합니다. 공장에 대한 의심이 발생할 수 있습니다. – Jarod42