【发布时间】:2017-10-31 17:38:02
【问题描述】:
我正在创建一个带有如下类对象的向量。
#include <iostream>
#include <vector>
using namespace std;
class myclass
{
public:
myclass(int a = 0) : x(a)
{
cout << "myclass constructor" << endl;
}
int x;
};
int main()
{
vector<myclass> v(2, 1);
cout << "size : " << v.size() << endl;
cout << v[0].x << endl;
cout << v[1].x << endl;
}
据我了解,将创建 2 个对象,其值为“1”。但是构造函数只被调用一次。当我打印对象的值时,两个对象都将 x 值打印为“1”。下面是输出。
myclass constructor
size : 2
1
1
我不明白为什么构造函数没有被调用两次。
1) 这里是否调用了复制构造函数?
我尝试在下面的类中编写复制构造函数
myclass(myclass &obj)
{
x = obj.x;
cout << "Copy Constructor" << endl;
}
但它在编译时抛出以下错误。
vector.cpp:15:9: 注意:没有已知的参数 1 从‘const myclass’到‘myclass&’的转换 vector.cpp:10:9: 注意:myclass::myclass(int) 我的类(int a = 0):x(a) ^ vector.cpp:10:9:注意:参数 1 没有从“const myclass”到“int”的已知转换
2) 如果我们要创建该类的对象向量,是否有任何规则不应该定义复制构造函数?如果我们使用用户定义的类对象创建向量,我们应该遵循哪些规则?
【问题讨论】:
-
正确的复制构造函数是
myclass(const myclass &obj)。const部分非常重要。 -
你的拷贝构造函数不好。副本 CTOR 需要获取 myclass 对象的 constant 引用。不是参考。
-
@rodrigo:是的。我同意。但这不应该影响这个问题。
-
@kadina 嗯,下面的答案不同意你刚才所说的
-
通过复制将项目添加到向量中。
标签: c++