"x = new(Foo)"和任意 Foo 的"x = new Foo"一样吗?
Is "x = new(Foo)" the same as "x = new Foo" for an arbitrary Foo?
我正在查看一些遗留代码,并遇到了x=new(Foo);
(注意所提供的类型周围的括号)。我测试了变化,它似乎与x=new Foo;
相同
Foo是非pod数据结构。一些外部内存泄漏程序正在标记这条线——它正在为CORBA out参数分配内存,因此调用者应该负责删除,但这是一个与许多间接层分开的问题。
我的分析是正确的,它是可以接受的风格吗?
这是正确的,但这种风格至少是不寻常的。
在完整类型名称周围有时允许使用括号,但在这种情况下是无关紧要的。这就像在不需要的表达式周围加上括号一样。也许最接近的类比是
return( 0 ); /* looks like a function, but isn't */
令人困惑的是,sizeof
操作符在传递类型名称时需要父节点,而在传递表达式时不需要父节点。我个人认为这是不一致的,我不会选择把它推广到语言的其他部分。
如果类型名称中有圆括号,则必须用圆括号括起来。其他类型也可以包括在内。
需要括号的例子:
new int(*[10])(); // parser error: parsed as (new int) (*[10]) ()
new (int (*[10])()); // OK: allocates an array of 10 pointers to functions
From cppreference.com: new expression
相关文章:
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 重载运算符new[]的行为取决于析构函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 过载'operator new'如何导致无限循环?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- Codelite C++ new project
- 在类c++中使用new声明数组
- g++用户定义的动态链接库上的全局new和delete运算符
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 在将 new 与指针一起使用时,创建数组的指定长度
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- Clearing Class Foo with new(pFoo) Foo()
- 作为参数的"new Foo()"和"&Foo()"之间的区别
- std::shared_ptr 初始化:make_shared<Foo>() vs shared_ptr<T>(new Foo)
- 如果 Foo 的构造函数抛出,'Foo *p = new Foo()' 中 p 的值是多少?
- std::make_shared(new Foo())是否创建单例?
- auto foo = ref new Foo();什么是"ref"?
- 函数中是否有任何内存泄漏,如function(new Foo())
- "x = new(Foo)"和任意 Foo 的"x = new Foo"一样吗?