Articles of copy constructor

Error comstackdor C ++ C2280 “intentando hacer referencia a una función eliminada” en Visual Studio 2013 y 2015

Este fragmento se comstack sin errores en Visual Studio 2013 (Versión 12.0.31101.00 Actualización 4) class A { public: A(){} A(A &&){} }; int main(int, char*) { A a; new A(a); return 0; } mientras se comstack con este error en Visual Studio 2015 RC (Versión 14.0.22823.1 D14REL): 1>—— Build started: Project: foo, Configuration: Debug Win32 […]

¿De qué sirve el constructor de copia privada en c ++?

¿Por qué las personas definen un constructor de copia privada? ¿Cuándo se hace un buen diseño al constructor de copias y al operador de asignación privado? Si no hay miembros en la clase que sean punteros o manejadores de un objeto único (como el nombre del archivo), entonces ¿hay otros casos en que el constructor […]

Deshabilitar copia constructor

Tengo una clase : class SymbolIndexer { protected: SymbolIndexer ( ) { } public: static inline SymbolIndexer & GetUniqueInstance ( ) { static SymbolIndexer uniqueinstance_ ; return uniqueinstance_ ; } }; ¿Cómo debo modificarlo para desactivar el código como: SymbolIndexer symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( ); y solo permite código como: SymbolIndexer & ref_symbol_indexer_ = SymbolIndexer::GetUniqueInstance […]

Operador de asignación de llamada en el constructor de copia

¿Hay algunas desventajas de tal implementación de copy-constructor? Foo::Foo(const Foo& i_foo) { *this = i_foo; } Según recuerdo, se me recomendó en un libro llamar al constructor de copias del operador de asignación y usar un conocido truco de intercambio, pero no recuerdo, por qué …

¿Por qué se llama el constructor de copia en lugar del constructor de conversión?

Así que básicamente este código: class A { }; class B { B (const B& b) {} public: B (){} B (const A& a) {} }; int main() { A a; B b1(a); //OK B b2 = a; //Error } solo genera un error para B b2 = a . Y ese error es error: […]

¿Podemos devolver los objetos que tienen un constructor eliminado / copia / movimiento privado por valor de una función?

En C ++ 03 es imposible devolver un objeto de una clase que tenga un constructor de copia no definido privado por valor: struct A { A(int x) { … } private: A(A const&); }; A f() { return A(10); // error! return 10; // error too! } Me preguntaba si esta restricción se eliminó […]

¿Por qué no se llama al constructor de copia?

class MyClass { public: ~MyClass() {} MyClass():x(0), y(0){} //default constructor MyClass(int X, int Y):x(X), y(Y){} //user-defined constructor MyClass(const MyClass& tempObj):x(tempObj.x), y(tempObj.y){} //copy constructor private: int x; int y; }; int main() { MyClass MyObj(MyClass(1, 2)); //user-defined constructor was called. MyClass MyObj2(MyObj); //copy constructor was called. } En el primer caso, cuando MyClass(1, 2) llama al […]

¿Por qué este código intenta llamar al constructor de copia?

Acabo de pasar una cantidad desorbitada de tiempo jugando con un error de comstackción en Visual Studio. He destilado el código en el pequeño ejemplo comstackble a continuación y lo probé en IdeOne y obtuve el mismo error que puede ver aquí . Me pregunto por qué el siguiente código intenta llamar a B(const B&) […]

¿Cuál es la forma más confiable de prohibir un constructor de copia en C ++?

A veces es necesario prohibir un constructor de copia en una clase de C ++ para que la clase se convierta en “no copiable”. Por supuesto, operator= debería estar prohibido al mismo tiempo. Hasta ahora he visto dos formas de hacer eso. La forma 1 es declarar el método como privado y no darle ninguna […]

¿Por qué el constructor de movimiento definido por el usuario deshabilita el constructor de copia implícito?

Mientras leo boost / shared_ptr.hpp, vi este código: // generated copy constructor, destructor are fine… #if defined( BOOST_HAS_RVALUE_REFS ) // … except in C++0x, move disables the implicit copy shared_ptr( shared_ptr const & r ): px( r.px ), pn( r.pn ) // never throws { } #endif ¿Qué significa el comentario “generado constructor de copia, […]