为什么类的构造函数有其他带有new的类
why constructor of class has other class with new?
我有来自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
调用基类构造函数。假定基类需要KeccakF
和MultiRatePadding
对象,并同意在其析构函数中获取所有权并释放它们。
这闻起来像Crypto++,但无论如何。。。
new
是C++中用于对象堆分配的关键字。使用new
分配的任何内容都必须在不再需要时调用相应的delete
,否则将导致内存泄漏。
Crypto++尤其倾向于使用指针对象,同时还要处理对象删除,因此您可以简单地将匿名堆对象构造为参数,如您在示例中看到的那样。
然而,一般来说,仅仅因为某个东西需要一个指向类型的指针,就不意味着可以像这样使用new
。如果被调用者没有delete
,那么您只是创建了一个mem泄漏。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- std::具有相同基类的类的变体
- 命名空间中具有.h和.cpp文件的类
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?
- 使用 "new" 命令在 C++ 中的类构造函数中分配 2D 数组
- 使用泛型成员变量"placement new"结构/类数组的正确方法是什么?
- 无法调用使用 malloc/placement new 创建的类上的虚函数
- 通过传递外部指针或内部调用 new 构造的类,我可以在销毁时天真地删除这个指针吗?
- 尝试在没有new的情况下使用我的自定义类构造函数
- 检索在函数内部使用运算符new分配的类指针对象成员的值时出现的问题
- 关于嵌套类的运算符new的重载解析
- 通过类中的重载运算符 new 返回不同的类指针
- 为具有已替换运算符new的类自定义std::分配器
- 为什么类的构造函数有其他带有new的类
- 类和对象中带有new的用法指针
- 向量在我的类中.错误:数组new [-fpermissive]中的圆括号初始化项
- 具有析构函数和new操作符的类
- C++:无法用new实例化我的类
- 使用"new"的类范围