这是允许的吗? :
class A;
void foo()
{
static A();
}
当我尝试这样做时,我收到信号11,但以下情况正常:
class A;
void foo()
{
static A a;
}
谢谢。
答案 0 :(得分:4)
不。在C ++中没有“匿名对象”这样的东西。存在这样的事情:定义要立即丢弃的类型A的对象;你写的是一个表达式,它返回一个永远不会分配给变量的A对象,就像从未分配或使用printf的返回代码一样。
在该代码中,如果它有效,那么您将声明在堆外部分配“无对象”。由于没有分配对象,所以没有意义。
答案 1 :(得分:4)
您可以创建“匿名”自动变量,但不能创建静态变量。下面将创建一个A类对象并调用构造函数,然后在函数exit上调用析构函数。
class A;
void foo()
{
A();
}
您可以通过在堆上分配对象或在预先分配的位置分配constructing it in place来获得类似的效果。
void foo()
{
new A();
}
void foo()
{
static char memory[sizeof (A)];
new (memory) A();
}
但是,在这两种情况下都无法正确清理对象,因为没有保留指针以便以后调用delete。即使静态内存将被释放,析构函数也永远不会被调用。自从与垃圾收集器一起使用时,匿名对象才真正生成。
答案 2 :(得分:3)
不知何故,我认为这个人是在单身构造函数的副作用之后。
无论如何,只是给这个darn一个变量名。
答案 3 :(得分:0)
当然在C ++中有匿名对象! 此示例中的A(100) is anonymous object
但是如果你考虑一下,创建静态匿名对象是没有意义的。