我在使用 Qt 时遇到了这个问题,但类型无关紧要;这是我感到困惑的 C++ 语言的一般形式。
我想要一个
std::unique_ptr<QSqlDatabase> database;
有这个签名的函数
QSqlDatabase QSqlDatabase::addDatabase()
我试着做类似的事情
database.reset(QSqlDatabase::addDatabase());
当然编译失败了,因为database
期望一个 QSqlDatabase *
方法调用返回一个简单的 QSqlDatabase
.想把addDatabase()
的返回值放上去怎么办进入 unique_ptr
?我被卡住了,因为我没有在任何地方使用堆。
最佳答案
所以,Loki 可能是对的,但这是您问题的答案。
database.reset(new QSqlDatabase(QSqlDatabase::addDatabase()));
或
std::unique_ptr<QSqlDatabase> database(new QSqlDatabase(QSqlDatabase::addDatabase());
其中任何一个都将结果复制到堆分配的 QSqlDatabase 中。
关于c++ - 将堆栈分配的函数返回值放入 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283781/