为什么类的构造函数有其他带有new的类

why constructor of class has other class with new?

本文关键字:new 的类 其他 为什么 构造函数      更新时间:2023-10-16

我有来自keccak工具的以下代码。这个项目有几个类。Keccak,KeccakF,多费率添加。。。是类。请帮助我理解这段代码中的"new",以及为什么类的构造函数有其他类?

Keccak::Keccak(unsigned int aRate, unsigned int aCapacity)
:  (new KeccakF(aRate+aCapacity), new MultiRatePadding(), aRate) {}

这看起来像是过时的预标准语法,如果只有一个基类,则可以在mem初始值设定项中省略其名称。也就是说,此构造函数使用三个参数new KeccakF(aRate+aCapacity)new MultiRatePadding()aRate调用基类构造函数。假定基类需要KeccakFMultiRatePadding对象,并同意在其析构函数中获取所有权并释放它们。

这闻起来像Crypto++,但无论如何。。。

new是C++中用于对象堆分配的关键字。使用new分配的任何内容都必须在不再需要时调用相应的delete,否则将导致内存泄漏。

Crypto++尤其倾向于使用指针对象,同时还要处理对象删除,因此您可以简单地将匿名堆对象构造为参数,如您在示例中看到的那样。

然而,一般来说,仅仅因为某个东西需要一个指向类型的指针,就不意味着可以像这样使用new。如果被调用者没有delete,那么您只是创建了一个mem泄漏。