5.5.2 Truy cập biến thành viên của đối tượng thông qua con trỏ

Tất cả các biến, bao gồm các đối tượng, được đưa vào cuộc sống theo cách “bình thường” (bằng khai báo, chứ không phải bằng cách sử dụng từ khoá new) sẽ tồn tại trong một vùng bộ nhớ riêng biệt được gọi là ngăn xếp – stack. Đó là một vùng bộ nhớ dành riêng để lưu trữ tất cả các thực thể tự động.

Hãy thử tưởng tượng stack như một sinh vật sống có kích thước khác nhau trong quá trình thực hiện của chương trình. Stack sẽ lớn lên khi các biến tự động mới được tạo ra và co lại khi các biến không còn cần thiết. Lưu ý rằng quá trình này nằm ngoài tầm kiểm soát của bạn. Bạn không thể làm thay đổi cái cách mà stack thay đổi.

Các thực thể được tạo ra “theo yêu cầu” (bằng từ khóa new) được tạo ra trong một vùng bộ nhớ đặc biệt được gọi là heap. Ngược lại với stack, heap gần như hoàn toàn chịu sự kiểm soát của bạn. Bạn quyết định có bao nhiêu biến, mảng, đối tượng… sẽ chiếm vị trí trong heap và việc khi nào những thực thể này kết thúc vòng đời của chúng cũng tùy thuộc vào bạn luôn.

Các đối tượng được lưu trữ trong heap phải được truy cập theo một cách tương tự như truy cập vào các structure  được cấp phát động. Bạn không được sử dụng dấu “chấm” thông thường vì không có structure (hay đối tượng) có thể đóng vai trò đối số bên trái của toán tử “.”, trừ khi bạn dereference con trỏ. Bạn cần sử dụng toán tử mũi tên “->” để thay thế.

Nhìn vào chương trình ở đây →

Chúng tôi đã thêm trường value vào Class. Nó được khai báo trong phần public của lớp để bạn có thể truy cập nó một cách tự do từ bên ngoài lớp. Để truy cập nó thông qua con trỏ, bạn phải sử dụng toán tử “->” . Nhìn vào các dấu ngoặc đơn xung quanh đối số của toán tử ++. Chúng có thực sự thiết không ? Điều gì sẽ xảy ra khi bạn gỡ bỏ chúng ?

Chương trình sẽ cho ra kết quả sau: