将堆栈分配的函数返回值放入unique_ptr

时间:2014-12-03 23:42:43

标签: c++

我在Qt工作时遇到了这个问题,但类型并不重要;它是我困惑的C ++语言的一般形式。

我想要一个

std::unique_ptr<QSqlDatabase> database;

此签名有一个功能

QSqlDatabase QSqlDatabase::addDatabase()

我尝试做类似

的事情

database.reset(QSqlDatabase::addDatabase());

当然这无法编译,因为database期望QSqlDatabase *并且方法调用返回一个简单的QSqlDatabase。如果我想将addDatabase()的返回值放入unique_ptr,该怎么办?我被困了,因为我没有使用堆。

2 个答案:

答案 0 :(得分:1)

你不想这样做:

int work()
{
     QSqlDatabase DB  = QSqlDatabase::addDatabase();


} // DB goes out of scope here and is destroyed automatically.

答案 1 :(得分:1)

所以,Loki可能是对的,但这是你问题的答案。

database.reset(new QSqlDatabase(QSqlDatabase::addDatabase()));

std::unique_ptr<QSqlDatabase> database(new QSqlDatabase(QSqlDatabase::addDatabase());

其中任何一个都将结果复制到堆分配的QSqlDatabase中。