C++ SomeClass&;a=*新的SomeClass(…)
我遇到了一个我以前从未见过的构造,我想知道它的用途是什么:C++ SomeClass&;a=*新的SomeClass(…),c++,reference,C++,Reference,我遇到了一个我以前从未见过的构造,我想知道它的用途是什么: { SomeClass &a = *new SomeClass(...); a.someFunc(); } 如果我的理解是正确的,a是对SomeClass的引用,是通过new创建的。这有什么作用?也就是说,为什么不能将其编写为SomeClass a(…)?此外,该代码是否泄漏内存?我猜是这样的,因为调用new时没有匹配的delete 这有什么作用 在堆栈溢出时生成Rep。或者有人故意想被炒鱿鱼 为什么不能把它
{
SomeClass &a = *new SomeClass(...);
a.someFunc();
}
如果我的理解是正确的,a
是对SomeClass
的引用,是通过new
创建的。这有什么作用?也就是说,为什么不能将其编写为SomeClass a(…)
?此外,该代码是否泄漏内存?我猜是这样的,因为调用new
时没有匹配的delete
这有什么作用
在堆栈溢出时生成Rep。或者有人故意想被炒鱿鱼
为什么不能把它写成a级(…)
应该是的
此外,该代码是否泄漏内存?我猜是这样的,因为调用new
时没有匹配的delete
是的,的确如此。这表明
SomeClass
是一个奇怪的非标准对象,只能在堆上创建,不能在堆栈上创建,也不能静态创建。因此,您应该注意SomeClass
所做的其他奇怪的事情:
- 它很可能在构造函数中创建一个新线程,接管对象的所有权
- 对象的某些方法可能会在某个点隐式删除它
这就是说,这可能表明
SomeClass
被严重错误设计,可能试图封装用其他编程语言编写的某些行为。这纯粹是邪恶的。将其替换为SomeClass a(…)代码>你的两个猜测都是肯定的。为了这个目的。。。我猜一个来自C++世界的java开发人员。如果<代码>某个FUNC/<代码>包含<代码>删除这个< /代码>,那就是使用这个格式在<代码> Someclass A(…)的原因。代码>,它不会泄漏。当然,这会让一切变得更加邪恶。引用:“对不起,那应该是某个类a(…),而不是某个类a(…)。我对问题进行了编辑以反映这一点。“编辑?@DieterLücking:编辑是问题本身,而不是代码段。”。也就是说,如果你读代码块后面的第三句话,“也就是说,为什么这不能写成SomeClass a(…)
?”它之前说SomeClass&a(…)
对不起,那应该是SomeClass a(…)
,而不是SomeClass&a(…)
。我编辑了这个问题以反映这一点。