Поместите возвращаемое в стек значение возвращаемого значения функции в unique_ptr

0

Я столкнулся с этой проблемой, работая в Qt, но типы не имеют значения; это общая форма языка C++, о которой я смущен.

Я хочу иметь

std::unique_ptr<QSqlDatabase> database;

Существует функция с этой сигнатурой

QSqlDatabase QSqlDatabase::addDatabase()

Я попытался сделать что-то вроде

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

Конечно, это не удалось скомпилировать, потому что database ожидает QSqlDatabase * а вызов метода возвращает простую QSqlDatabase. Что делать, если я хочу поместить возвращаемое значение addDatabase() в unique_ptr? Я застреваю, потому что я не использую кучу.

  • 2
    Что не так в auto database = QSqlDatabase::addDatabase(); ? Для чего нужен указатель?
  • 3
    Если вы не размещаете объект динамически, почему вы думаете, что вам нужен unique_ptr для управления им?
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

Итак, Локи, вероятно, прав, но вот ответ на ваш вопрос.

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

или

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

Любой из этих экземпляров приводит результат в выделенную кучей QSqlDatabase.

1

Вы не хотите этого делать:

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


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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню