我从keccak工具获得以下代码。这个项目有几个班。 Keccak,KeccakF,MultiRatePadding,...是classes.please帮助我理解这段代码中的“new”以及为什么类的构造函数有其他类?
Keccak::Keccak(unsigned int aRate, unsigned int aCapacity)
: (new KeccakF(aRate+aCapacity), new MultiRatePadding(), aRate) {}
答案 0 :(得分:2)
这看起来像古老的预标准语法,如果您只有一个基类,则可以在 mem-initializer 中省略其名称。也就是说,此构造函数使用三个参数new KeccakF(aRate+aCapacity)
,new MultiRatePadding()
,aRate
调用基类构造函数。据推测,基类需要KeccakF
和MultiRatePadding
个对象,并同意取得所有权并在析构函数中释放它们。
答案 1 :(得分:0)
这闻起来像Crypto ++,但无论如何......
new
是C ++中用于对象堆分配的关键字。使用new
分配的任何内容必须在不再需要时调用相应的delete
,否则将导致内存泄漏。
Crypto ++特别倾向于使用指针对象,同时还要处理对象删除,因此您只需构建一个匿名堆对象作为参数,如您在示例中所示。
一般情况下,只是因为某些内容指向某个类型的指针而不是意味着你可以像这样使用new
。如果被叫方没有delete
,那么您刚刚创建了一个内存泄漏。