C++ 使用类对象创建向量时未调用类构造函数
我正在用类对象创建一个向量,如下所示C++ 使用类对象创建向量时未调用类构造函数,c++,C++,我正在用类对象创建一个向量,如下所示 #include <iostream> #include <vector> using namespace std; class myclass { public: myclass(int a = 0) : x(a) { cout << "myclass constructor" << endl; } int
#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;
}
我不明白为什么构造函数没有被调用两次
1) 这里是否调用了复制构造函数
我尝试在类中编写复制构造函数,如下所示
myclass(myclass &obj)
{
x = obj.x;
cout << "Copy Constructor" << endl;
}
myclass(myclass&obj)
{
x=对象x;
cout复制构造函数需要一个const
引用。对复制构造函数使用myclass(const myclass&obj)
据我所知,将创建两个值为“1”的对象。但是
构造函数只被调用一次
构造函数被调用一次,然后对象被复制多次
然后,从输出中可以清楚地看到图片:
myclass constructor
Copy Constructor
Copy Constructor
size : 2
1
1
请记住,向量有时也会调整大小并必须复制元素。复制构造函数需要一个const
引用。对于复制构造函数,请使用myclass(const myclass&obj)
据我所知,将创建两个值为“1”的对象。但是
构造函数只被调用一次
构造函数被调用一次,然后对象被复制多次
然后,从输出中可以清楚地看到图片:
myclass constructor
Copy Constructor
Copy Constructor
size : 2
1
1
请记住,向量也会调整大小,有时必须复制元素。试试看
myclass(const myclass &obj)
{
x = obj.x;
cout << "Copy Constructor" << endl;
}
myclass(const myclass&obj)
{
x=对象x;
试试看
myclass(const myclass&obj)
{
x=对象x;
正确的复制构造函数应该是myclass(constmyclass&obj)
。const
部分非常重要。你的复制构造函数不好。复制构造函数需要对myclass对象进行常量引用。而不是引用。@rodrigo:是的。我同意。但这不应该影响这个问题。@kadina好吧,下面的答案与你刚才说的不一致。复制对象是通过复制来添加到向量的正确的复制构造函数应该是myclass(constmyclass&obj)
。常量部分非常重要。你的复制构造函数不好。复制构造函数需要对myclass对象进行常量引用。而不是引用。@rodrigo:是的,我同意。但这不应该影响这个问题。@kadina好吧,下面的答案与你刚才说的不一致,复制对象是通过复制来添加到向量的。Doe这意味着一个对象将被创建,其余的对象将被复制构造?这看起来很明显,如果我们使用用户定义的类对象创建向量,我们应该遵循哪些规则?@kadina:当然有!@kadina您只需要实现操作符==()
如果您打算将向量与==
进行比较。如果您尝试对向量进行操作,但未能在类上实现正确的操作,您将得到一个编译器错误。这是否意味着将创建一个对象,并复制构造其余的对象?这显然看起来是正确的。如果是,我们应该遵循哪些规则使用用户定义的类对象创建向量?@kadina:当然有!@kadina如果要将向量与==
进行比较,只需实现运算符==()
。如果尝试使用向量的操作,但未能在类上实现正确的操作,则会出现编译器错误。