![]() |
1
6
e、 g.CGD对象大致为:
这里的默认复制构造函数是危险的(导致双重破坏),提供一个“正确”的复制构造函数是非常困难和昂贵的。 另一个原因可能是,大多数CObject派生类都是经过变异的,因此通过引用传递。缺少的副本构造函数将捕获意外的副本,这些副本会改变副本而不是传递的对象:
相当多的API遵循这种模式,因为MFC不依赖异常来处理错误(由于历史原因:并非所有目标编译器都能很好地支持它们,而且MFC需要大量额外的资源处理,这会让异常变得很痛苦)。 我不认为这些选择是好的,例如,派生类应该被允许使用默认的复制构造函数,如果他们的成员允许的话(大多数成员应该允许)。 不过,这一决定符合MFC的“思维模式”,也符合MFC创建时的要求/限制。 |
![]() |
2
3
考虑以下几点:
现在,如果你收到
由于大量的MFC类管理句柄,因此强制类的创建者显式重写以创建复制构造函数和复制赋值运算符是有意义的。
|
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 3 年前 |
![]() |
nick2225 · 隐式调用复制构造函数? 3 年前 |
![]() |
nohaga · 为什么在本例中p3需要默认构造函数? 3 年前 |
![]() |
Aadil Hoda · 为什么类类型的成员需要初始化? 3 年前 |
![]() |
EloiGG · 具有任意类型的变量的可数的C++函数 3 年前 |