Bra_Hancock
2017-07-28 03:36C++ 复制构造函数形参必须是const吗?等3个问题
下例中,复制构造函数如果不加const会出错,error C2558: class 'Asdf' : no copy constructor available or copy constructor is declared 'explicit'。
(1)我传的asd1不是个临时对象,为什么需要const?
(2)看不出复制构造函数为什么效率比移动构造函数低。
(3)我想把对象本身加到vector中,但是不能以引用形式传?只能用指针?
用的是VS2010的编译器。
求大神详解。谢谢。
#include <iostream>
#include <vector>
using namespace std;
class Asdf
{
public:
Asdf()
{
cout << "Constructor." << endl;
}
Asdf(Asdf & asdf1) //(1)
{
cout << "Copy Constructor." << endl;
}
Asdf(Asdf && asdf1) //(2)
{
cout << "Move Constructor." << endl;
}
int aa;
};
int main()
{
/*
vector<Asdf *> vector1; //(3)
Asdf * asd1 = new Asdf();
asd1->aa = 9;
vector1.push_back(asd1);
asd1->aa = 10;
cout << vector1[0]->aa << endl;
*/
vector<Asdf> vector1;
Asdf asd1;
asd1.aa = 9;
cout << &asd1 << endl;
vector1.push_back(asd1); //(1)
vector1.push_back(move(asd1)); //(2)
asd1.aa = 10;
cout << vector1[0].aa << endl;
return 0;
}
- 点赞
- 回答
- 收藏
- 复制链接分享
4条回答
为你推荐
- 如何在函数里面知道形参传入数组的元素个数?
- c语言
- c++
- 1个回答
- 为什么构造函数不含有默认参数后就提示默认构造函数已被删除?
- c++
- 1个回答
- 为什么指针函数可以不带形参名?
- c语言
- c++
- 1个回答
- C#调用C++函数,参数为指针该怎么处理?
- c++
- 1个回答
- 关于在C++中函数参数的问题,如果在参数中用New的方式那么它的生命周期是怎样的?
- c语言
- 开发语言
- c++
- 3个回答
换一换