谁能帮我解释一下为什么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后面有两个单数是啥意思?怎么解决?

以上代码如果不够我可以再贴,期待高手指点!
...全文
167 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
在“天池平台二手车交易价值评估竞赛”这一数据科学任务,参与者需构建预测模型以估算二手车辆的市场成交价。此赛事属于机器学习与数据分析领域的典型应用场景,旨在系统提升参赛者的特征构建、模型优化及结果验证能力。下文将分模块阐述关键技术要点: 1. 数据清洗与规整 原始数据集需经过系统处理,包括填补空缺数值、识别离群观测、剔除冗余字段,并将分变量编码为模型可读的数值形式。此阶段质量直接影响后续建模效果。 2. 特征构建与筛选 需从原始字段提炼有效预测因子,包括但不限于车辆制造厂商、出厂年份、行驶总里程、外观配色及动力系统配置。基于领域常识可衍生新特征,例如车龄换算、年均行驶强度指数等。 3. 数据分布探查 通过统计图表分析变量间关联规律,例如采用趋势线观察里程数与价格的相关性,使用分位数图示不同品牌的价格区间分布特征。 4. 算法模型选型 常用预测架构包括线性回归模型、树型决策结构、集成学习方法(如随机森林、XGBoost、LightGBM)、支持向量机及深度学习网络。需根据数据特性与计算资源进行综合选择。 5. 参数优化流程 采用K折交叉验证评估模型稳定性,配合网格搜索或随机搜索策略进行超参数调优,以最大化模型预测精度。 6. 集成策略应用 通过Bagging、Boosting或堆叠融合等技术整合多个基模型,通常能获得超越单一模型的表现。 7. 性能度量标准 预测任务常用评估指标包括均方误差、平均绝对误差、均方根误差及决定系数。不同业务场景需针对性选择评估体系。 8. 结果输出规范 最终预测结果需按赛事要求整理为特定结构的数据文件,通常包含样本标识符与对应价格预测值两列。 9. 时序特征处理 当数据包含交易时间维度时,需引入时间序列分析方法(如季节性分解、循环神经网络)捕捉市场波动规律。 10. 工程实践规范 采用Git进行版本追踪,通过模块化编程提升代码可维护性,建立标准化实验记录体系。 该竞赛全面覆盖数据预处理、特征工程、模型构建与验证等核心环节,同时强调工程化实施规范,既能强化技术理论认知,又可培养实际业务场景的问题解决能力。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

65,206

社区成员

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

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