У меня есть две функции.C++: возвращает элемент std :: vector <>, по ссылке, во временный объект
function1 вызывает функцию2, которая возвращает ссылку на объект, которую затем я использую для вызова публичной функции.
function1(function2).returned_object.mymethod();
Это довольно громоздкий способ сделать что-то, но он работает.
Теперь у меня есть проблема, когда мне нужно вызвать один метод, затем другой метод, поэтому мне нужен временный объект.
ClassName temp_obj = function1(function2);
temp_obj.method1();
temp_obj.method2();
Мой вопрос: как я могу объявить временный объект, который будет хранить объект, возвращающийся по ссылке. Я предполагаю, что мне нужен указатель.
Другая проблема заключается в том, что temp_obj содержится в векторе, и меня беспокоят конфликты и утечка памяти. Если я использую указатель, мне также придется использовать деструктор?
Вот соответствующий код:
bool Machine::perform_function(std::vector<Job>& jobs) {
bool add = true;
if (can_fail) {
add = coin_toss();
}
for (int i = 0; i < my_jobs.size(); i++) {
if (add) {
find_job(my_jobs[i], jobs).toggle(name, item_name, true);
}
if (!add) {
find_job(my_jobs[i], jobs).toggle(name, item_name, false);
}
}
return add;
}
Job& Machine::find_job(std::string jobname, std::vector<Job>& jobs) {
for (int i = 0; i < jobs.size(); i++) {
if (jobs[i].is_job(jobname)) {
return jobs[i];
}
}
}
«Как я могу объявить временный объект, который будет хранить функцию, возвращаемую по ссылке» - вы не можете сохранить функцию в объекте. – immibis