【发布时间】:2020-03-29 12:41:16
【问题描述】:
我已经开始学习 C++,但我对移动语义有些怀疑。当书中说A的移动构造函数“窃取”了右值B的属性时,是否意味着指向值V的指针从B切换到A?那么这样一来,A就不需要再分配一部分内存了?
如果是,为什么在这段代码中
class CBuffer{
private:
int size;
int csize;
char* ptr;
char rtp;
public:
CBuffer(int size): size(size), csize(0){
ptr = new char[size];
*ptr = 'a';
}
CBuffer(const CBuffer& source): size(3), csize(source.csize) {
this->ptr = new char[size];
memcpy(this->ptr, source.ptr, size);
}
CBuffer(CBuffer&& source){
this->ptr = source.ptr;
this->size = source.size;
std::cout << &this->ptr << std::endl;
std::cout << &source.ptr << std::endl;
source.ptr = nullptr;
}
};
int main(){
CBuffer a = CBuffer(1);
CBuffer b = std::move(a);
CBuffer c = b;
线条
std::cout << &this->ptr << std::endl;
std::cout << &source.ptr << std::endl;
打印不同的地址?
【问题讨论】:
-
打印指针的地址,而不是指针的值。
-
&this->ptr和&source.ptr是指针变量的地址。不是他们指向的对象的地址 -
为什么 A 在从 B 处“窃取”内存时需要分配更多内存?那只是贪婪。
标签: c++ move-semantics