我有一个带有指向 MySQL 连接的指针的类。只有这个指针和连接保持不变才有意义。但是,其他类需要连接,因此处理此问题的一种方法是让类成为
class A {
std::unique_ptr < sql::Connection > conn;
public:
const sql::Connection* getConnection ();
}
或者它的变体(比如在conn
声明的不同地方返回一个引用或者添加const
。getConnection
的实现是喜欢
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/