当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在类构造函数中创建新值并分配给私有unique_ptr?》经验,为你挑选了1个好方法。

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

我尽力而为:

#include 
#include 

class A {
public:
    A() {};
    A(int);
    void print();
private:
    std::unique_ptr 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’ and ‘int*’)
  int_ptr_ = new int(a);

Vlad from Mo.. 9

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

第一种方法更好,因为在除默认构造函数之外的其他两种方法中,还调用了另外一种方法或移动赋值运算符.



1> Vlad from Mo..:

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

第一种方法更好,因为在除默认构造函数之外的其他两种方法中,还调用了另外一种方法或移动赋值运算符.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有