C++ 我应该使用shared_ptr还是返回unique_ptr.get()?

C++ 我应该使用shared_ptr还是返回unique_ptr.get()?,c++,mysql,C++,Mysql,我有一个指向MySQL连接的指针类。只有将指针和连接设置为常量才有意义。但是,其他类需要连接,因此处理此问题的一种方法是将该类 class A { std::unique_ptr < sql::Connection > conn; public: const sql::Connection* getConnection (); } 但是,我不知道是否应该使用std::shared_ptr并返回指针的副本。在哪种情况下,您会选择哪种方法?如果应用程序的设计

我有一个指向MySQL连接的指针类。只有将指针和连接设置为常量才有意义。但是,其他类需要连接,因此处理此问题的一种方法是将该类

class A {
     std::unique_ptr < sql::Connection > conn;

   public:
     const sql::Connection* getConnection ();
}

但是,我不知道是否应该使用
std::shared_ptr
并返回指针的副本。在哪种情况下,您会选择哪种方法?

如果应用程序的设计方式可以证明,在对象的实例超出范围并被销毁后,SQL连接无法使用,则使用
唯一的\u ptr
,并使用
get()
获取底层指针,这就足够了

另一方面,如果在销毁
a
对象后可能需要使用连接,那么
唯一的\u ptr
显然是不够的,这里有一个
共享的\u ptr


还有一些其他的可能性要考虑。例如,动态分配
A
类本身的实例,并在需要它的地方使用
std::shared_ptr
引用它;这通过契约证明,只要需要底层SQL连接,给定的
a
就仍然存在。在这种情况下,
unique\u ptr
本身不会有太多的附加值。但是,如果
A
在底层SQL连接之上实现了一些增值功能,那么采用这种方法可能是有意义的。

如果应用程序是多线程的,则最好打开数据库连接的多个实例,因此在每个实例中使用std::unique\ptr。这将避免共享数据库资源时出现瓶颈。

那么什么是
A
?其他类如何访问
A
A
负责检查所需的MySQL数据库是否存在并可用。其他类不能直接访问
A
,而是需要由
A
管理的连接,通过在其方法中接收对
conn
的引用作为参数。此外,如果类
A
的对象确实拥有资源,并且指针永远不能为空,则他应该返回一个引用而不是原始指针。
const sql::Connection* A::getConnection() {
  return conn.get();
}