Я спросил в области чата stackoverflow следующий вопрос.Конструктор C++ Object obj = Object ("string", 22); создание временного объекта?
Если вы создаете свой объект, как это, он создает временное и затем вызывает оператор присваивания для назначения темпа объекту obj?
Object obj = Object("Chris", 27);
Мне сказали, что он просто вызывает конструктор.
Однако, когда я запускаю код, консоль печатает, что dtor был вызван на самой следующей строке, что означает, что был создан временной объект, и это означает, что оператор присваивания называется слишком правильным?
Так что, если это правда, то это значит, что это написание конструкторов как этот
Object obj("Chris", 22);
на самом деле работает гораздо быстрее, так как вы избегаете временный CTOR и dtor, и оператор присваивания. Когда я запускаю код, как указано выше, ни одна строка dtor не печатается на консоль до конца функции. Таким образом, кажется, что временное создание не было, и мой код будет работать более эффективно.
class Object
{
public:
Object()
{
mSize = 0;
}
Object(string & name, int size)
:
mName(name),
mSize(size)
{
}
~Object()
{
cout << "Object Dtor called" << endl;
}
string mName;
int mSize;
};
Копия может быть опущена компилятором, но это зависит от компилятора и используются опции , Что вы используете? –
Visual Studio 2012 Express для рабочего стола – EddieV223
Вы строите отладку или выпуск? –