仅使用您提供的代码无法回答该问题。真正的问题是为什么您可以接受或不接受指针,以及如果将指针传递给您,谁拥有内存。
根据您的对象在您的特定域中应该做什么,可以采取不同的替代方案。例如,如果您可以与调用者共享所有权,那么您应该使用 a shared_ptr
,如果您将保留对象中的所有权,您应该使用 aunique_ptr
在界面中明确说明您的对象将获取所有权。如果不共享所有权,则考虑传递对对象的引用(即使您在内部存储了一个指针),在这种情况下,您可以将所有权与实际使用分开:
// option 1: shared ownwership
class A {
std::shared_ptr<B> ptr;
public:
A( std::shared_ptr<B> const & p ) : ptr(p) {}
A() : ptr( std::make_shared<B>() ) {}
};
// option 2: grab ownership
class A {
std::unique_ptr<B> ptr;
public:
A( std::unique_ptr<B> p ) : ptr( std::move(p) ) {}
A() : ptr( new B(); }
};
// option 3: no ownership (unless we create the object)
// (separating concerns: ref to access the object, ptr to manage it)
class A {
std::unique_ptr<B> ptr; // only ownership
B * ref;
public:
A( B & b ) : ptr(), ref(&b) {}
A() : ptr( new B() ), ref(ptr.get()) {}
// Internally use 'ref' to access the object the destructor will delete it
// if needed
};