class Foo
{
friend class SquirrelVM;
public:
Foo() { cout << "Ctor" << endl; }
virtual ~Foo() { cout << "Dtor" << endl; }
Foo(const Foo & o) { cout << "const Ctor" << endl; }
template <typename _ty>
Foo(const _ty & val) { cout << "T const Ref" << endl; }
template <typename _ty>
Foo(_ty & val) { cout << "T Ref" << endl; }
template <typename _ty>
Foo(_ty * val) { cout << "T Ptr" << endl; }
};
Foo CreateFoo()
{
Foo ret;
return ret;
}
int main(int argc, char* argv[])
{
Foo f = CreateFoo();
return 0;
}
uscite sono diverse tra VS2005 e VS 2010. Risultati attesi sono come questo ..della funzione modello è diverso tra il VS2005 e VS2010
Ctor
const Ctor
Dtor
Dtor
uscite sopra descritti provengano se io costruisco in VS2005.
Ma, l'uscita di VS2010 non è lo stesso con la priorità
Ctor
T Ref
Dtor
Dtor
Perché modello della funzione di VS2005 è superiore al normale funzione in VS2010?
[modifica] Se const viene omesso il costruttore di copia, di uscita (che è lo stesso con VS2005) prevede esce. C'è qualche effetto collaterale se la forma del costruttore di copia non è uguale alla forma raccomandata? modulo raccomandato .. voglio dire ... Foo(const Foo&);
non Foo(Foo&);
Grazie per il vostro aiuto. Quindi, come risolvere questo problema? – codevania
Per favore controlla di nuovo la mia domanda. Ho fatto modifica. – codevania
@codevania: è necessario utilizzare i riferimenti rvalue in VS2010 e implementare un costruttore di spostamenti. – Puppy