gpt4 book ai didi

c++ - 具有 unique_ptr 的类的复制构造函数

转载 作者:IT老高 更新时间:2023-10-28 11:59:06 29 4
gpt4 key购买 nike

如何为具有 unique_ptr 成员变量的类实现复制构造函数?我只考虑 C++11。

最佳答案

由于 unique_ptr 无法共享,您需要深度复制其内容或将 unique_ptr 转换为 shared_ptr

class A
{
std::unique_ptr< int > up_;

public:
A( int i ) : up_( new int( i ) ) {}
A( const A& a ) : up_( new int( *a.up_ ) ) {}
};

int main()
{
A a( 42 );
A b = a;
}

正如 NPE 所提到的,您可以使用 move-ctor 而不是 copy-ctor,但这会导致类的不同语义。 move-ctor 需要通过 std::move:

显式使成员可移动
A( A&& a ) : up_( std::move( a.up_ ) ) {}

拥有一整套必要的操作符也会导致

A& operator=( const A& a )
{
up_.reset( new int( *a.up_ ) );
return *this,
}

A& operator=( A&& a )
{
up_ = std::move( a.up_ );
return *this,
}

如果你想在 std::vector 中使用你的类,你基本上必须决定这个 vector 是否应该是一个对象的唯一所有者,在这种情况下它就足够了类可移动,但不可复制。如果您省略了 copy-ctor 和 copy-assignment,编译器将指导您如何将 std::vector 与仅移动类型一起使用。

关于c++ - 具有 unique_ptr 的类的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16030081/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com