c++ - 如何将 unique_ptr 与 std::copy 一起使用?

标签 c++ c++11 smart-pointers unique-ptr

我用谷歌搜索了一下,一无所获。我想我只是不知道如何输入正确的问题。

好的,我的简单 MemoryBlock 类有两个成员数据,int sizeint* data .因此,为了构建复制构造函数,我使用 std::copy 进行内存复制。现在我想尝试用C++的智能指针来代替原始指针。说使用 unique_ptr<int> data .以下代码的等效项是什么?因为现在,rhs.data + size行不通。

std::copy(rhs.data, rhs.data + size, data);

最佳答案

首先你必须为创建的对象分配数组,然后你可以将值复制到它。例如

MemoryBlock( const MemoryBlock &m ) : size( m.size ), data( new int[m.size] )
{
    std::copy(m.data.get(), m.data.get() + m.size, data.get());
}

考虑到成员数据data必须声明为

std::unique_ptr<int[]> data;

如果你想将移动构造函数添加到类中,你可以通过以下方式定义它

MemoryBlock( MemoryBlock &&m ) : size( 0 ), data( nullptr )
{
    std::swap( m.size, size );
    std::swap( m.data, data );
}

关于c++ - 如何将 unique_ptr 与 std::copy 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41616840/

相关文章:

c++ - 使用自定义分配器及其替代方案重载基本类型

C++多重继承

c++ - Qt/C++中多重继承的正确方式是什么?

c++ - 在 BOOST Graph 中过滤现有的 filtered_graph

c++ - 复制构造函数……进退两难

c++ - 无法包装 std::istream,移动后 unique_ptr 不为空

c++ - 为什么 `std::unordered_map` "speak like the Yoda"- 重新排列元素?

c++ - 智能指针无法释放内存

c++ - 从方法返回引用

c++ - 将智能指针作为参数传递给函数