赋值期间未调用构造函数
Constructor not being called during assignment
我正在努力理解以下代码。
我创建了两个类BClass和DClass,如下所示。
//我的头文件
class BClass
{
public:
BClass();
~BClass();
virtual void PrintMe() const;
};
class DClass : public BClass
{
public:
DClass();
~DClass();
void PrintMe() const;
};
//我的cpp文件
BClass::BClass()
{
}
BClass::~BClass()
{
}
void BClass::PrintMe() const
{
printf("This is base class n");
}
DClass::DClass()
{
}
DClass::~DClass()
{
}
void DClass::PrintMe() const
{
printf("This is derived class n");
}
//我的主文件
BClass b; //BClass constructor called
b.PrintMe();
DClass d; //DClass constructor called
d.PrintMe();
BClass* b1 = &d; //No constructor called as it is pointer assignment
b1->PrintMe();
BClass b2 = d; //No constructor called...expecting BClass constructor to be called???
b2.PrintMe();
在最后一节中,我期望调用BClass构造函数。但事实并非如此。有人能解释一下发生了什么事吗?
如果这样做,我们知道BClass构造函数被称为
BClass b2; //BClass constructor called
b2 = d;
有人能解释之间的区别吗
BClass b2 = d;
和
BClass b2;
b2 = d;
谢谢。
BClass b2 = d;
调用BClass
的复制构造函数,该构造函数由编译器隐式生成,因为它隐式生成的所有条件都满足。
BClass b2; b2 = d;
调用BClass
的默认构造函数,然后调用复制赋值运算符,该运算符也是隐式生成的。
调用复制构造函数,而不是查看http://en.cppreference.com/w/cpp/language/copy_constructor
BClass b2 = d;
复制构造函数被调用,如果你不实现它,它会由编译器自动生成
BClass b2; //The default constructor is called at line 1
b2 = d;//The assignment operator is called
实现复制构造函数和赋值运算符,打印提示以查看差异
相关文章:
- 在c++中使用向量时,如何调用构造函数和析构函数
- C++:考虑但不调用构造函数的特殊性
- 对象实例化调用构造函数的次数太多
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C ++:通过大括号调用构造函数?
- 不能调用构造函数
- 赋值 boost::intrusive_ptr 而不调用构造函数?
- 在模板化类的构造函数中调用构造函数
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 我不明白在这个例子中什么时候调用构造函数
- 调用c++构造函数的不同方法
- 调用构造函数与将内联常量定义为默认参数
- 如何通过 Rust FFI 调用C++构造函数?
- "new"运算符是否总是调用构造函数?
- 无法调用构造函数
- 使用 "()" 调用构造函数不同于"{}"
- 确定是调用构造函数还是强制转换运算符的因素