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

标签 c++ mysql

我有一个带有指向 MySQL 连接的指针的类。只有这个指针和连接保持不变才有意义。但是,其他类需要连接,因此处理此问题的一种方法是让类成为

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

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

或者它的变体(比如在conn声明的不同地方返回一个引用或者添加constgetConnection的实现是喜欢

const sql::Connection* A::getConnection() {
  return conn.get();
} 

我正在徘徊,但是我是否应该使用 std::shared_ptr 并返回指针的拷贝。在哪种情况下人们会选择这两种方法?

最佳答案

如果您的应用程序的设计方式可以证明在您的 A 实例之后无法使用 SQL 连接对象超出范围并被销毁,然后使用 unique_ptr ,并使用 get() 获取底层指针, 就足够了。

另一方面,如果可能需要使用 A 之后的连接对象被销毁,然后 unique_ptr显然是不够的,一个shared_ptr这里是有序的。

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

关于c++ - 我应该使用 shared_ptr 还是返回 unique_ptr.get()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359424/

相关文章:

python - mysql wheel 在此平台上不支持 wheel

c++ - 如何摆脱 -Wpointer-arith

c++ - 我需要实现一个二维形状旋转功能

php - 使用 Yii Active Record 查找一列的最大值

MySQL 时间差异按天分组

mysql - OpenShift添加墨盒MySQL 5.5引擎InnoDB

php - 使用 get_where 而不是 get 时 Codeigniter 分页不起作用

c++ - 使用调用外部函数的函数加载由 MATLAB Coder 生成的 DLL

c++ - CGAL 3D表面网格生成设置初始点

c++ - 让函数返回模板类型