gpt4 book ai didi

c++ - C++-没有自定义交换功能的移动赋值运算符?

转载 作者:行者123 更新时间:2023-12-01 14:29:14 26 4
gpt4 key购买 nike

我正在阅读Stroustrup的书(第4版),并看到了以下示例:

template<typename T, typename A = allocator<T>>
struct vector_base { // memory structure for vector
A alloc; // allocator
T* elem; // start of allocation
T* space; // end of element sequence, start of space allocated for possible expansion
T* last; // end of allocated space

vector_base(const A& a, typename A::size_type n, typename A::size_type m =0)
: alloc{a}, elem{alloc.allocate(n+m)}, space{elem+n}, last{elem+n+m} { }
~vector_base() { alloc.deallocate(elem,last-elem); }

vector_base(const vector_base&) = delete; // no copy operations
vector_base& operator=(const vector_base&) = delete;

vector_base(vector_base&&); // move operations
vector_base& operator=(vector_base&&);
};

template<typename T, typename A>
vector_base<T,A>::vector_base(vector_base&& a)
: alloc{a.alloc},
elem{a.elem},
space{a.space},
last{a.last}
{
a.elem = a.space = a.last = nullptr; // no longer owns any memory
}

template<typename T, typename A>
vector_base<T,A>& vector_base<T,A>::operator=(vector_base&& a)
{
swap(*this,a);
return *this;
}
this answer,我知道您不能只在赋值运算符中使用 std::swap(*this, other),因为 std::swap通常是根据赋值运算符本身实现的。因此,您首先需要提供自己的自定义 swap函数。
这是一个错误,还是我错过了什么?

最佳答案

看起来这是Usage of std::swap() inside move assignment should cause endless recursion (and causes), but it is an example from Stroustrup's book的副本。好像Stroustrup确实定义了自定义交换函数;我似乎已经错过了。
编辑:我还没有找到交换功能。看来这是书上的错误。

关于c++ - C++-没有自定义交换功能的移动赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62615473/

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