谁能帮我解释一下为什么new后面有两个参数,开源代码中几个类定义,谢谢!

weakwater 2009-02-22 01:04:54
webkit中的几个类定义:
template<bool isInteger, typename T> struct GenericHashTraitsBase;

template<typename T> struct GenericHashTraitsBase<false, T> {
static const bool emptyValueIsZero = false;
static const bool needsDestruction = true;
};

// Default integer traits disallow both 0 and -1 as keys (max value instead of -1 for unsigned).
template<typename T> struct GenericHashTraitsBase<true, T> {
static const bool emptyValueIsZero = true;
static const bool needsDestruction = false;
static void constructDeletedValue(T& slot) { slot = static_cast<T>(-1); }
static bool isDeletedValue(T value) { return value == static_cast<T>(-1); }
};


template<typename T> struct GenericHashTraits : GenericHashTraitsBase<IsInteger<T>::value, T> {
typedef T TraitType;
static T emptyValue() { return T(); }
};


struct FormElementKeyHashTraits : WTF::GenericHashTraits<FormElementKey> {
static void constructDeletedValue(FormElementKey& slot) { new (&slot) FormElementKey(WTF::HashTableDeletedValue); }
static bool isDeletedValue(const FormElementKey& value) { return value.isHashTableDeletedValue(); }
};


可以看出 FormElementKeyHashTraits 继承自GenericHashTraits 又继承自GenericHashTraitsBase

GenericHashTraitsBase有两个定义分别对应第一个参数是true和false

问题就是那段橙色代码中的new (&slot) FormElementKey(WTF::HashTableDeletedValue); 出错了:
error C2661: “operator new”: 没有重载函数接受 2 个参数

其中WTF::HashTableDeletedValue是一个枚举变量值,值为0

请问,这个new后面有两个单数是啥意思?怎么解决?

以上代码如果不够我可以再贴,期待高手指点!
...全文
168 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdlrobin 2009-02-22
  • 打赏
  • 举报
回复
new(放置地址)类型(构造参数)这样解释可以吗?
例如new(0x0f0f0f0f)char('w');
weakwater 2009-02-22
  • 打赏
  • 举报
回复
多谢各位

真是学海无涯啊
lei_zhuyan 2009-02-22
  • 打赏
  • 举报
回复
UP
机智的呆呆 2009-02-22
  • 打赏
  • 举报
回复
百度placement new
zhuxueling 2009-02-22
  • 打赏
  • 举报
回复
FormElementKey
可能是这个类的声明有问题。
weakwater 2009-02-22
  • 打赏
  • 举报
回复
3楼,从它的父类来看,没有重载new,如果重载估计也不会出现这个错误
zhuxueling 2009-02-22
  • 打赏
  • 举报
回复
比如,
class A{};
new A; 这个new得到一个参数,就是sizeof(A)

A *p;
new (p)A; 这个new得到2个参数,一个是p,一个是sizeof(A)

new看上去像是一个关键字,实际是一个函数,更确切的说,是一个运算符,和+,-,*,/是一样的。
(但操作符又是函数,比如operator +)
在new这个文件中声明的,

后面那个很怪的,叫放置式语法,指的是,新生成的对象,并不是随机分配的地址,而是使用地址p。
在tcpl这本书里讲到了。






waizqfor 2009-02-22
  • 打赏
  • 举报
回复
原来我也遇到过 看看这个
http://support.microsoft.com/kb/143207/zh-cn
netsocket 2009-02-22
  • 打赏
  • 举报
回复
mark
MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指标柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 标准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指标。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指标(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧