|
|
1
16
C++0X将引入语法以允许构造函数调用其他构造函数。
在那之前,
一个清晰的例子:
或者如他们所说的“欢闹随之而来” |
|
|
2
11
成员和基类将在进入构造函数体之前初始化,然后在调用第二个构造函数时再次初始化。一般来说,这将导致内存泄漏和可能未定义的行为。 所以答案是“不,这不是声音代码”。 |
|
3
5
下面是关于C++的常见问题 question ,一个类的一个构造函数是否可以调用同一类的另一个构造函数来初始化该对象?艾斯:
|
|
|
4
3
除非您试图调用父级的构造函数,否则我建议您创建一个私有的初始化方法。没有理由不能跨构造函数调用共享初始值设定项。 |
|
|
5
1
如果您有这样的构造函数,则此方法不起作用:
无法恢复原始参数,因此无法从复制构造函数调用该构造函数。 |
|
|
6
1
正如所写的代码一样,它应该可以工作——尽管我不能确切地想象为什么要这样写代码。特别是,它取决于这样一个事实:所有的指针都只用于引用一个in t。既然如此,为什么不直接输入一个in t呢? 在里面 对象,而不是使用指针并动态分配int?简言之,他们所拥有的是长期的和低效的,但与以下方面没有显著区别:
不幸的是,当你试图从指针中获得一些真正的使用时(例如,在不同的对象中分配不同数量的内存),它们使用的“技巧”与“放置新的”停止工作——这完全取决于每个对象分配的内存量完全相同。由于每个分配中的分配都是完全相同的,为什么要将该分配放在堆中而不是使其成为对象本身的一部分? 说实话,在那儿 是 在有意义的情况下。然而,我能马上想到的唯一一个问题是,分配量很大 和 您运行的环境中堆空间比堆栈空间大得多。 代码可以工作,但它只在相当狭窄的特定情况下才有用。我并不认为这是我作为一个如何做事情的例子所推荐的。 |
|
|
7
0
在我看来,即使在派生类的构造函数中也可以安全地使用new(this),前提是您知道自己在做什么。您只需确保您的基类有一个虚拟的构造函数(对于它的基类,在整个链中都是这样)。例如:
输出:
当然,如果基类有常量*或引用成员(或者无法编辑包含基类声明的文件),那么您就走运了。这样就不可能在其中编写一个虚拟的构造函数,更不用说用“new(this)”来初始化这些“constant”成员两次!这是真正的事情,C++0X委托构造函数,真的可以派上用场。 请告诉我这项技术是否还有其他不安全或不可移植的地方。 (编辑:我还认识到,在虚拟类中,虚拟函数表可能被初始化两次。这将是无害的,但效率低下。我需要尝试一下,看看编译后的代码是什么样子的。) *如果您在基类中只有常量成员(并且没有引用),那么您就不会完全走运。您只需确保所有常量成员的所有类都有自己的伪构造函数,基类的伪构造函数可以依次调用这些伪构造函数。如果一些常量有内置类型,比如 int 尽管这些将不可避免地被初始化(例如 常数int 将初始化为零)。 编辑:这里有一个链接虚拟构造函数的例子,如果 int值 成为 常量int值 内部foobar类:
输出:
(0xCCCCCC是未初始化内存在调试版本中初始化的内容。) |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |