mã này biên dịch và chạy không có lỗi:Tại sao tôi có thể gọi hàm tạo riêng từ phạm vi toàn cục?
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;
}
ai đó có thể giải thích lý do tại sao các nhà xây dựng có thể được gọi là?
Thật vậy, thay thế biểu thức bằng 'foo * ref = new foo;' (lưu ý không có 'foo ::') để có lỗi trình biên dịch! –