2008-12-24 135 views

回答

4

没有。在C++中没有这样的“匿名对象”。定义一个类型为A的对象会立即被丢弃;你写的是一个表达式,它返回一个永远不会分配给变量的A对象,就像printf的返回码通常不会被分配或使用一样。

在那段代码中,如果它有效,你会声明“no object”被分配到堆外部。由于没有分配对象,所以没有意义。

4

您可以创建一个“匿名”自动变量,但不是一个静态变量。以下将创建类A的对象并调用构造函数,然后在函数出口调用析构函数。

class A; 
void foo() 
{ 
    A(); 
} 

你可以通过在预先分配的位置在堆上分配或constructing it in place对象得到类似的效果。

void foo() 
{ 
    new A(); 
} 

void foo() 
{ 
    static char memory[sizeof (A)]; 
    new (memory) A(); 
} 

但是,在这两种情况下,都无法正确清理对象,因为指针未被保留以供以后的删除调用使用。即使静态内存将被释放,析构函数也不会被调用。匿名对象只有在与垃圾收集器一起使用时才真正使用。

3

不知何故,我认为这个人的单身构造函数的副作用后。

无论如何,只是给了事物一个变量名已经。

+0

这就是为什么我发现自己在看这个问题(7年后)。我想创建一个具有全局作用域的对象,但我不希望它有一个名称。它在其构造函数中注册了一些其他对象,所以它不需要名称。 – 2015-05-17 18:48:54

0

当然还有匿名的C++对象! A(100) is anonymous object在此示例中

但是,如果您考虑一下,则创建静态匿名对象是没有意义的。

相关问题