Il seguente frammento dà l'avvertimento:Avviso "Oggetto temporaneo": si tratta di me o del compilatore?
[C++ Warning] foo.cpp(70): W8030 Temporary used for parameter '_Val' in call to 'std::vector<Base *,std::allocator<Base *> >::push_back(Base * const &)'
.. sulla linea indicata.
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!
compilatore è CodeGear C++ Builder 2007.
Stranamente, se il costruttore per il derivato è cancellato, l'avvertimento va via ... Sono io o il compilatore?
EDIT: L'unico modo che ho trovato per rimuovere l'avviso è quello di qualcosa di simile a questo:
Derived * d;
list1.push_back(d = new Derived); // << No warning now...
Nessun avviso su questo codice con gcc. – kriss
Probabilmente non è * tutto * il codice. Base e Derivati hanno costruttori (quelli non generati dal compilatore)? –
@MadKeithV - aggiungi o prendi #include, ovvero TUTTO il codice. Ho iniziato con un caso molto più complesso e l'ho ridotto alle ossa nude che mostra il problema sopra. –
Roddy