Я пытаюсь создать класс с двумя конструкторами. Один из них является конструктором по умолчанию, а другой вызывает параметризованный конструктор. Я получаю ошибку компилятора, которая говорит мне, что я не могу использовать перемещение на только что созданном объекте, и я вроде понимаю, что ему это не нравится, потому что здесь нет реального назначения.
Как я могу добиться правильного поведения? Я пытаюсь избежать написания двух конструкторов, которые инициализируют переменные. Функция инициализации могла бы работать, но тогда мне пришлось бы заполнить тело конструкторов, и я пытался найти точное решение, как показано ниже.
#include <string>
#include <iostream>
#include <memory>
using namespace std;
class Foo
{
public:
Foo(unique_ptr<int>& number) : m_number(move(number))
{
}
Foo() : Foo(make_unique<int>(54))
{
}
void print()
{
cout << m_number << endl;
}
private:
unique_ptr<int> m_number;
};
int main()
{
Foo f;
f.print();
return 0;
}
main. cpp : 18: 33: ошибка: неверная инициализация неконстантной ссылки типа 'std :: unique_ptr &' из значения типа 'std :: _ MakeUniq :: __ single_object {aka std :: unique_ptr}' Foo (): Foo (make_unique (54)
1008 *