Я использую вектор STL, который является вектором параметров.Передача конструктора функции
std::vector<Parameter> foo;
Я пытался найти способ, чтобы добавить объекты параметров к вектору без этого:
Parameter a;
foo.push_back(a);
Я наткнулся на реализации, который сделал это:
foo.push_back(Parameter()); //Using the Parameter constructor
я думал что когда я создал объект, конструктор называется не наоборот. Почему я могу передать конструктор функции?
Это на самом деле не только стенография. Семантика программы отличается в обоих вариантах. При передаче анонимного объекта объект уничтожается в конце выражения. Но при объявлении переменной время жизни увеличивается до конца области. –
@phresnel: Да, с точки зрения компилятора (педантичного) можно взять адрес 'a', поскольку это значение L; Я имел в виду с точки зрения программиста, когда он/она пишет это так, обычно это делается, чтобы не дать ему имя. – legends2k
Или убедиться, что нет отходов или ресурсов, открытых в течение более длительного времени, чем необходимо. Быть неподходящим может даже быть катастрофическим.Представьте, что вы передаете какое-либо соединение с базой данных для функции, и после этой функции вы переходите в какой-то режим ожидания, и соединение, возможно, будет открываться в течение нескольких часов, дней, недель. Когда-нибудь это может вызвать исключение, потому что база данных была отключена, или база данных не может быть отключена, поскольку какой-то неактивный демон (ваш) продолжает открывать неиспользуемое соединение. Действительно, программисты на С ++ обязательно должны обладать видимостью и RAII, и делать то, что локально, как разумно. –