Вызвать конструктор напрямую
От: Rothmans  
Дата: 09.12.09 09:46
Оценка:
Привет всем,

Вот давеча натолкнулся (в коде коллег ) на такую вот конструкцию:
сначала стояло:
class SomeClass
{
...
};

SomeClass x[100];
...
for(..)
{
  x[i] = SomeClass();
}

потом видимо при переходе на очередную версию gcc это дело перестало работать (?) и оказалось закомментированным.
На место вышеозначенного кода пришло следующее:
class SomeClass
{
...
};

SomeClass x[100];
...
for(..)
{
  // g++ does not allow the automatic casting
  // x[i] = SomeClass();
  SomeClass sc = SomeClass();
  x[i] = sc;
}

Правда второй вариант тоже не собирается, поскольку у SomeClass не объявлен копирующий конструктор.

Я вообще не каждый день пишу на С++, поэтому тонкости ускользают и/или забываются.
Объясните-ка мне, что автор вообще хотел сказать конструкцией вида x[i] = SomeClass(); ?

Каков смысл в вызове конструктора напрямую без new?
Другой мой коллега утверждает, что
void proc()
{
   SomeClass();
}

не только вызовет конструктор, но и _выделит_ память под безымянный объект в стеке и еще и деструктор вызовется при выходе из процедуры.

Какой толк вызывать вне класса его конструктор напрямую без new и без объявления переменной (кроме исполнения самого кода конструктора)?

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.