Как создать новое значение и назначить частному уникальному ptr в конструкторе класса?



Как создать новый и присвоить значение частному unique_ptr в конструкторе класса? Tyvm:^) Keith



Мои лучшие усилия:



#include <iostream>
#include <memory>

class A {
public:
A() {};
A(int);
void print();
private:
std::unique_ptr<int> int_ptr_;
};
A::A(int a) {
int_ptr_ = new int(a);
}
void A::print() {
std::cout << *int_ptr_ << std::endl;
}
int main() {
A a(10);
a.print();
std::cout << std::endl;
}


Результат компилятора:



smartPointer2.1.cpp:13:11: error: no match for ‘operator=’ (operand types are ‘std::unique_ptr<int>’ and ‘int*’)
int_ptr_ = new int(a);
568   1  

1 ответ:

Напишите

A::A(int a) : int_ptr_( new int(a) )
{
}

Или вы могли бы написать

A::A(int a) 
{
    int_ptr_.reset( new int(a) );
}

Или

A::A(int a) 
{
    int_ptr_ = std::make_unique<int>( a );;
}

Первый подход лучше, потому что в двух других, кроме конструктора по умолчанию, вызывается также дополнительный метод или оператор присваивания перемещения.

Comments

    Ничего не найдено.