如何在类构造函数中创建新值并分配给私有unique_ptr?

kmiklas

如何在类的构造函数中创建new并将其赋值给私有的unique_ptr?Tyvm:^)基思

我最大的努力:

#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);
来自莫斯科的弗拉德

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 );;
}

第一种方法更好,因为在其他两种方法中,除了默认构造函数之外,还称为附加方法或移动赋值运算符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章