用C ++创建对象

时间:2012-01-09 04:09:16

标签: c++ object


我对C ++中的代码示例有一点疑问。

vector<Cat> v;
Cat c;
v.push_back(c);
Cat d = v[0];

在这段代码中,创建了多少个对象?

2 个答案:

答案 0 :(得分:1)

至少三个:

vector<Cat> v;
Cat c;  // default construction
v.push_back(c); // copy construction of v[0] from c
Cat d = v[0];  // copy construction of d from v[0]

编辑:请注意,我这里只计算Cat个对象,因为询问创建了多少个 对象是没有意义的,因为这将是特定于实现的(如何已std::vector已实施?Cat做了什么?...)

答案 1 :(得分:1)

将一些日志记录添加到Cat的构造函数中并自行测试:

class Cat
{
  Cat() 
  {
    std::cout<<"Constructing a Cat"<<std::endl;
  }
  Cat( const Cat & cat )
  {
    std::cout<<"Copy Constructing a Cat"<<std::endl;
  }
};

这是我得到的:http://codepad.org/Pzs9kOlH

请注意,在某些情况下,编译器可以自由删除不执行任何操作的代码块。因此可能会删除一些副本。使用假设的非常激进的编译器,它可能会注意到您的代码没有完成任何操作,并完全删除任何此类构造。由于我的构造函数现在更改输出,因此编译器不太可以自由删除对它们的调用。