extern class objx;
class Someclass
{
public:
Someclass();
void bar(objx);
objx &om;
};
void foo()
{
Someclass c;
objx o;
c.bar(o);
}
void Someclass::bar(objx& op)
{
//Save op in some local privatefield for later use
om = op; //Here there should not be a copy;
}
Выше код неправильный не так ли? Потому что когда o выходит из области видимости в foo (), он разрушается. Есть ли способ не копировать o в новый объект в баре? Например, используя bar (objx && op), чтобы нам не приходилось копировать объекты или использовать умные указатели и, конечно же, избегать нового / удаления? И когда bar () возвращает op, go выходит из области видимости, и объект разрушается.
[EDIT] Я мог бы вместо этого использовать указатель. Но вызывающая сторона должна отслеживать время жизни объекта. Вот чего я хочу избежать.
[EDIT2] Вопрос в следующем: существует ли механизм для поддержания локальной переменной в действии, пока ее ссылка передается посредством ссылки на другие функции (области)?
[EDIT4] Этот код выполняет те же функции, используя указатели:
#include <sstream>
class Someclass
{
public:
Someclass() { }
void bar(std::stringstream *);
std::stringstream *om;
};
void Someclass::bar(std::stringstream* op)
{
om = op;
}
int main()
{
Someclass c;
std::stringstream o;
c.bar(&o);
return 0;
}