este código compila y ejecuta sin errores:¿Por qué puedo llamar al constructor privado desde? Ámbito global?
class foo{
static foo *ref;
foo(){}
public:
static foo *getRef(){
return ref;
}
void bar(){}
};
foo* foo::ref = new foo; // the construcrtor is private!
int main(int argc, const char *argv[])
{
foo* f = foo::getRef();
f->bar();
return 0;
}
podría explicar por qué alguien puede ser llamado el constructor?
De hecho, sustituya la expresión con 'foo * ref = new foo;' (note la ausencia de 'foo ::') para obtener un error de compilación! –