Vengo de un C# de fondo a C++. Digamos que tengo un método que crea un objeto en un método en la pila, luego lo paso a otro método de clases que lo agrega a un vector memeber.Creando un objeto en la pila pasando luego por referencia a otro método en C++
void DoStuff()
{
SimpleObj so = SimpleObj("Data", 4);
memobj.Add(so);
}
//In memobj
void Add(SimpleObj& so)
{
memVec.push_back(so); //boost::ptr_vector object
}
Aquí están mis preguntas:
- Una vez que los métodos extremos DoStuff será el así salir de su ámbito y hacer estallar de la pila?
- memVec tiene un puntero a eso, pero se saltó lo que sucede aquí?
- ¿Cuál es la forma correcta de pasar objetos de pila a métodos que los almacenarán como punteros?
Me doy cuenta de que estos son probablemente obvios para un programador de C++ con cierta experiencia.
Marcos
solo como una nota al margen, "SimpleObj so = SimpleObj (" Datos ", 4);" no es muy C++ ish, use "SimpleObj así que (" Datos ", 4);" – Milan
Gracias, todavía tengo algo de resaca C#. – Mark
@ milan1612: desafortunadamente, sigue siendo la notación más portátil. un montón de compiladores de C++ falla en este último, [como en el caso] (http://www.parashift.com/c++faq-lite/ctors.html#faq-10.21). – Dummy00001