如何使用 unique_ptr 和 std::copy?
How to use unique_ptr with std::copy?
我用谷歌搜索,但一无所获。我想我只是不知道如何输入正确的问题。
好的,我的简单 MemoryBlock class 有两个成员数据,int size
和 int* data
。所以为了构建一个复制构造函数,我使用 std::copy 来进行内存复制。现在我想尝试用C++的智能指针来代替原始指针。说使用 unique_ptr<int> data
。以下代码的等效项是什么?因为现在,rhs.data + size
行不通了。
std::copy(rhs.data, rhs.data + size, data);
您可以使用 std::unique_ptr<>::get()
function,即 returns 指向托管对象的指针,或者 nullptr
如果没有对象。
即:
std::copy(rhs.data.get(), rhs.data.get() + size, data.get());
正如 NathanOliver 所评论的,另一种选择是将 unique_ptr
拥有的原始内存指针完全替换为 std::vector。
首先你必须为创建的对象分配数组,然后你可以将值复制到它。例如
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;
如果要将移动构造函数添加到 class 中,可以按以下方式定义它
MemoryBlock( MemoryBlock &&m ) : size( 0 ), data( nullptr )
{
std::swap( m.size, size );
std::swap( m.data, data );
}
我用谷歌搜索,但一无所获。我想我只是不知道如何输入正确的问题。
好的,我的简单 MemoryBlock class 有两个成员数据,int size
和 int* data
。所以为了构建一个复制构造函数,我使用 std::copy 来进行内存复制。现在我想尝试用C++的智能指针来代替原始指针。说使用 unique_ptr<int> data
。以下代码的等效项是什么?因为现在,rhs.data + size
行不通了。
std::copy(rhs.data, rhs.data + size, data);
您可以使用 std::unique_ptr<>::get()
function,即 returns 指向托管对象的指针,或者 nullptr
如果没有对象。
即:
std::copy(rhs.data.get(), rhs.data.get() + size, data.get());
正如 NathanOliver 所评论的,另一种选择是将 unique_ptr
拥有的原始内存指针完全替换为 std::vector。
首先你必须为创建的对象分配数组,然后你可以将值复制到它。例如
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;
如果要将移动构造函数添加到 class 中,可以按以下方式定义它
MemoryBlock( MemoryBlock &&m ) : size( 0 ), data( nullptr )
{
std::swap( m.size, size );
std::swap( m.data, data );
}