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

以上代码如果不够我可以再贴,期待高手指点!
...全文
192 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
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此技术的发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

65,210

社区成员

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

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