thể trùng lặp:
Calling class method through NULL class pointerTại sao phương thức gọi thông qua con trỏ null "làm việc" trong C++?
#include <iostream>
using namespace std;
class test
{
int i;
public:
test():i(0){ cout << "ctor called" << endl;}
void show()
{
cout<<"show fun called"<<endl;
}
};
int main(int argc , char *argv[])
{
test *ptr = NULL;
ptr->show();
return 0;
}
rõ ràng, không có ctor sẽ được gọi. Đây có phải là tiêu chuẩn này không? hoặc chỉ một số tối ưu hóa trình biên dịch vì con trỏ này không được sử dụng trong hàm thành viên show()?
Dereferencing một con trỏ null là UB. – chris
Thêm 'i = 1;' bên trong 'show()' và cố gắng chạy nó. –
chris, UB có nghĩa là lên đến thực hiện trình biên dịch? và tôi đang sử dụng g ++ 4.6.3. Jesse Good, tất nhiên, seg lỗi, không có nghi ngờ. Tôi tự hỏi nếu trình biên dịch sẽ tạo ra mã mà không có điều này cho chức năng thành viên mà không cần nó. – bbc