1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <stdio.h> class Sample { private: int x; public: Sample() { x = 10; } void testMethod1() { printf("testMethod1"); } void testMethod2() { printf("x = %d\n", x); } }; int main() { Sample *ptr = nullptr; ptr->testMethod1(); return 0; } |
Giải thích
Khi call hàm thành viên không phải hàm static (non-static) của một object của class thì compiler sẽ truyền vào tham số ngầm là con trỏ this. Trong trường hợp này, tuy con trỏ this là một giá null nhưng hàm được call là testMethod1 lại không truy cập biến member của class, tức là ko truy cập con trỏ this. Và do đó chương trình vẫn chạy bình thường mà không bị crash. Nếu thay vì call testMethod1 mà call testMethod2 thì chương trình sẽ oẳng ngay, các bạn cứ thử mà xem.
— Phạm Minh Tuấn (Shun) —