Это разрешено? :
class A;
void foo()
{
static A();
}
Я получаю сигнал 11, когда пытаюсь это сделать, но следующее работает нормально:
class A;
void foo()
{
static A a;
}
Спасибо.
Это разрешено? :
class A;
void foo()
{
static A();
}
Я получаю сигнал 11, когда пытаюсь это сделать, но следующее работает нормально:
class A;
void foo()
{
static A a;
}
Спасибо.
Неа. В C++ нет такого понятия, как "анонимный объект". Существует такая вещь, как определение объекта типа A, который немедленно отбрасывается; то, что вы написали, представляет собой выражение, которое возвращает объект A, который никогда не присваивается переменной, например, код возврата printf обычно никогда не присваивается и не используется.
В этом коде, если бы он работал, вы бы объявили, что «нет объекта», который будет размещен вне кучи. Поскольку нет объекта для выделения, это бессмысленно.
Вы можете создать "анонимную" автоматическую переменную, но не статическую. Следующее создаст объект класса A и вызовет конструктор, а затем вызовет деструктор при выходе из функции.
class A;
void foo()
{
A();
}
Вы можете получить аналогичный эффект, разместив объект в куче или построив его на месте в заранее выделенном месте. .
void foo()
{
new A();
}
void foo()
{
static char memory[sizeof (A)];
new (memory) A();
}
Однако в обоих случаях объект не может быть правильно очищен, поскольку указатель не удерживается для последующего вызова удаления. Несмотря на то, что статическая память будет освобождена, деструктор никогда не будет вызван. Анонимные объекты действительно создаются только с тех пор, как используются со сборщиком мусора.
Почему-то я думаю, что этому парню нужен побочный эффект конструктора синглтона.
В любом случае, просто дайте уже этой чертовой штуке имя переменной.
Конечно, в C++ есть анонимные объекты! A(100) — анонимный объект в этом примере.
Однако, если подумать, нет смысла создавать статический анонимный объект.