Mình có 1 class như sau được viết trong file Common.h
class Common
{
public:
Common(const int& data)
{
this->data = data;
}
private:
int data;
}
Mình có 2 file khác gọi là Namespace_Test.h và Namespace_Test.cpp
Trong Namespace_Test.h mình viết như sau:
static Common* pCommon = nullptr;
namespace CommonFunction
{
void Init();
}
Trong Namespace_Test.cpp mình viết như sau:
void CommonFunction::Init()
{
pCommon = new Common(10);
}
Bây giờ vào file main.cpp thì mình cũng có hàm Init() được viết như bên dưới, rồi mình viết hàm main:
void Init()
{
pCommon = new Common(10);
}
int main()
{
Init();
if(pCommon == nullptr)
cout << “Can’t initialize pCommon” << endl;
else
cout << “Successfully initialized pCommon” << endl;
/*
CommonFunction::Init();
if(pCommon == nullptr)
cout << “Can’t initialize pCommon” << endl;
else
cout << “Successfully initialized pCommon” << endl;
*/
}
Vấn đề: nếu mình dùng Init() được viết trong file main.cpp thì cout sẽ in ra “Successfully initialized pCommon”. Còn nếu mình dùng Init() được định nghĩa trong namespace CommonFunction (đoạn code trong phần bị comment out trong hàm main) thì cout sẽ in ra “Can’t initialize pCommon”
Khi mình dùng debug để kiểm tra pCommon xem có bị null hay không thì thấy như hình bên dưới. Điều đó có nghĩa là cấp phát thành công. Vậy tại sao khi mình kiểm tra có null không thì nó lại thực thi đoạn code là pCommon hiện tại đang null. Tại sao lại như vậy?
PS: mình muốn biết tại sao nó lại có hiện tượng như vậy nên xin các bạn tập trung vào vấn đề đó. Xin đừng “bạn làm abc…z thì sẽ không bị vậy.” Mình đang muốn hiểu để tránh sau này chứ không phải sau này gặp lại rồi không biết tại sao.