El siguiente fragmento da la advertencia:Advertencia de "objeto temporal": ¿soy yo o el compilador?
[C++ Warning] foo.cpp(70): W8030 Temporary used for parameter '_Val' in call to 'std::vector<Base *,std::allocator<Base *> >::push_back(Base * const &)'
.. en la línea indicada.
class Base
{
};
class Derived: public Base
{
public:
Derived() // << warning disappears if constructor is removed!
{
};
};
std::vector<Base*> list1;
list1.push_back(new Base);
list1.push_back(new Derived); // << Warning on this line!
compilador es Codegear C++ Builder 2007.
Curiosamente, si el constructor para Derivado se elimina, la advertencia desaparece ... ¿Soy yo o el compilador?
EDIT: La única forma que he encontrado para eliminar la advertencia es que algo similar a esto:
Derived * d;
list1.push_back(d = new Derived); // << No warning now...
No hay advertencia en este código con gcc. – kriss
Probablemente no sea * todo * el código. Do Base y Derived tienen constructores (generadores no compiladores)? –
@MadKeithV - dar o tomar un #include, que es TODO el código. Empecé con un caso mucho más complejo y lo reduje al mínimo que muestra el problema anterior. –
Roddy