Là giá trị của this
con trỏ được đảm bảo là không đổi trong suốt vòng đời của một đối tượng cụ thể?
Có .
Như người dùng Aconcagua đặt nó: giá trị của this
con trỏ luôn là giá trị địa chỉ của đối tượng mà hàm được gọi trên 1 . Vì vậy, câu hỏi tương đương với:
Một đối tượng có thể thay đổi địa chỉ bộ nhớ của nó theo thời gian cuộc sống?
Điều này là không thể, theo định nghĩa của lifetime
2 . Tuổi thọ của một đối tượng bắt đầu khi hoặc sau khi lưu trữ của nó được lấy và kết thúc trước khi nó được phát hành.
1) [class.this]/1
Trong cơ thể của một tổ chức phi tĩnh ( [class.mfct]
hàm thành viên), từ khóa this
là một prvalue có giá trị là một con trỏ đến đối tượng mà hàm được gọi.
2) [basic.life]/1
(nhấn mạnh của tôi)
Thời gian tồn tại của một đối tượng hoặc tham chiếu là thuộc tính thời gian chạy của đối tượng hoặc tham chiếu. Một biến được cho là có khởi tạo trống nếu nó được khởi tạo mặc định và, nếu đó là kiểu lớp hoặc mảng (có thể là đa chiều), kiểu lớp đó có hàm tạo mặc định tầm thường.
Thời gian tồn tại của một loại đối tượng T
bắt đầu khi :
- lưu trữ với sự liên kết và kích thước phù hợp cho loại
T
được lấy , và
- việc khởi tạo của nó (nếu có) đã hoàn tất (bao gồm cả khởi tạo trống) (
[dcl.init]
), ngoại trừ việc nếu đối tượng là thành viên công đoàn hoặc tiểu dự án, thời gian tồn tại của nó chỉ bắt đầu nếu thành viên công đoàn đó là thành viên khởi tạo trong union ( [dcl.init.aggr]
, [class.base.init]
) hoặc như mô tả trong [class.union]
.
Thời gian tồn tại của một đối tượng o
kiểu T
kết thúc khi :
- nếu
T
là một loại không phải là lớp, đối tượng bị phá hủy, hoặc
- nếu
T
là một loại lớp, cuộc gọi hàm hủy bắt đầu hoặc
- bộ nhớ mà đối tượng chiếm giữ được giải phóng hoặc được sử dụng lại bởi một đối tượng không được lồng trong
o
( [intro.object]
).
this
con trỏ luôn là giá trị của địa chỉ của đối tượng mà hàm được gọi trên đó. Vì vậy, câu hỏi tương đương với 'một đối tượng có thể thay đổi địa chỉ bộ nhớ theo thời gian sống không?'