Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SomeClass&;a=*新的SomeClass(…)_C++_Reference - Fatal编程技术网

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(…)
。我编辑了这个问题以反映这一点。