studio ser puede programacion privados privado constructores c++ constructor private most-vexing-parse

ser - C++-¿Qué está haciendo esto si el constructor es privado?



manual de programacion android pdf (4)

En el siguiente código, ¿por qué el compilador no se queja por mClass2?

class CMyClass{ private: CMyClass(){} }; void TestMethod(){ CMyClass mClass1; //Fails. CMyClass mClass2(); //Works. }


El segundo es una declaración de función.



Porque acaba de declarar una función mClass2 de cero argumentos que devuelve un CMyClass . Esa es una opción válida ya que podría haber, por ejemplo, una instancia de static CMyClass que esa función tiene acceso. Tenga en cuenta que CMyClass todavía tiene un constructor de copia pública.

(Para convencerse a sí mismo, compile este módulo para el ensamblador y observe que al comentar la línea CMyClass mClass2(); produce el mismo resultado).


Porque está declarando una función y no llamando al constructor como piensas.

Esto se llama como el Pars más irritante en c ++.

CMyClass mClass2();

declara una función mClass2() que no toma ningún parámetro y devuelve CMyClass