c++11 - 移动构造函数注释未打印
问题描述
我有一个像下面这样的小程序:
class boovector{
private: int size;
char *arr;
public:
boovector(){size=1;arr=new char[size];cout<<" boovector default constructor called"<<endl;}
boovector(boovector &b)
{
cout<<"boovector copyconstructor called"<<endl;
size = b.size;
arr = new char[size];
strncpy(arr,b.arr,size);
}
boovector(boovector &&b)
{
cout<<"boovector move assignment operator called"<<endl;
size =b.size;
arr = b.arr;
b.arr = nullptr;
}
~boovector()
{
delete []arr;
}
};
boovector createboovector()
{
boovector v;
return v;
}
void foo(boovector v)
{
}
int main(int argc, char *argv[])
{
boovector vet = createboovector();
foo(vet);
foo(createboovector());
return 0;
}
输出
boovector default constructor called
boovector copyconstructor called
boovector default constructor called
我希望在输出中看到“boovector move assignment operator called”。
如果我评论移动构造函数 "boovector(boovector &&b)",我得到编译器错误
invalid initialization of non-const reference of type 'boovector&' from an
rvalue of type 'boovector'
我想了解未调用移动构造函数背后的逻辑。
解决方案
在我的 MSVC 2017 社区版中,产生的输出是:
boovector default constructor called
boovector move assignment operator called
boovector copyconstructor called
boovector default constructor called
boovector move assignment operator called
所以它按预期工作。
推荐阅读
- go - Google Golang SDK 使用自定义 CA 包
- android - 主题编辑器中的更改不会更新项目?
- oauth - 如何从 nodejs 后端验证来自 Office365 的 oAuth 令牌?
- javascript - 使用 JWT 的 axios REST 调用
- php - 带有引导行问题的 ACF 中继器循环
- python - 在 numpy 中表示粒子运动
- jquery - 多个 ID 和一个图像
- c - 如何一次将 32 个字节复制到数组中
- python - 替换python数组中的元素,其中条件基于数组中的位置
- angular - Angular 2 变更检测机制是同步的还是异步的?