c++ - "x = new(Foo)"与任意 Foo 的 "x = new Foo"相同吗?

标签 c++ syntax new-operator

我正在查看一些遗留代码并遇到了 x=new(Foo);(请注意提供的类型周围的括号)。我测试了变体,它似乎与 x=new Foo;

相同

Foo 是一个非 POD 数据结构。某些外部内存泄漏程序正在标记该行 - 它正在为 CORBA 输出参数分配内存,因此调用者应该负责删除,但这是一个包含许多间接层的单独问题。

我的分析是否正确,是可以接受的风格吗?

最佳答案

这是正确的,但至少风格不寻常。

有时允许在完整的类型名称周围使用括号,但在这种情况下是无关紧要的。这就像在不需要的表达式周围加上括号。也许最接近的类比是

return( 0 ); /* looks like a function, but isn't */

令人困惑的是,sizeof 运算符在向其传递类型名称时需要括号,但在向其传递表达式时则不需要。我个人认为这是一种不一致,不会选择将其传播到其他语言。

关于c++ - "x = new(Foo)"与任意 Foo 的 "x = new Foo"相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14349470/

相关文章:

bind 返回的仿函数的 C++ 类型

c# - RegAsm.exe 和 regsvr32 有什么区别?如何使用 regsvr32 生成 tlb 文件?

php - 这在 PHP : -> or => 中是什么意思

c++ - 为什么没有在范围内声明字符串

c++ - 当我将它分配给 std::string 时,我可以释放 char* 字符串的内存吗?

C结构语法

c++ - C++中的未知变量声明语法

c++ - 自定义分配器,包括放置新案例

c++ - 当分配返回 0 时,带有空异常规范调用构造函数的 operator new

c++ - 分配指向固定大小数组的指针