我在Qt工作时遇到了这个问题,但类型并不重要;它是我困惑的C ++语言的一般形式。
我想要一个
std::unique_ptr<QSqlDatabase> database;
此签名有一个功能
QSqlDatabase QSqlDatabase::addDatabase()
我尝试做类似
的事情 database.reset(QSqlDatabase::addDatabase());
当然这无法编译,因为database
期望QSqlDatabase *
并且方法调用返回一个简单的QSqlDatabase
。如果我想将addDatabase()
的返回值放入unique_ptr
,该怎么办?我被困了,因为我没有使用堆。
答案 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中。