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

标签 c++

我在使用 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/

相关文章:

C++ std::for_each() 函数参数类型是什么?

c++ - WMQ C++ 获取请求的消息 ID 并将其设置为回复的相关 ID

c++ - std::for_each 和二维数组

c++ - 如何动态转换 boost::scoped_ptr?

c++ - 无法编译(未声明且预期的主表达式)

c++文件数组弄乱了我的变量

c++ - 使用最小值和最大值缩放 Mat 中的每个单元格

c++ - 错误 C2760 : syntax error: unexpected token '<' , 预期 ';'

c++ - 如何将我的 cli 信息(变量等)共享给子进程(bash shell 脚本)

c++ - 当数组从函数返回时,为什么我不能使用基于范围的循环?