Mã nên giải thích điều:C++: con trỏ thành viên được khởi tạo? mẫu
class A
{
B* pB;
C* pC;
D d;
public :
A(int i, int j) : d(j)
{
pC = new C(i, "abc");
} // note pB is not initialised, e.g. pB(NULL)
...
};
Rõ ràng PB nên được khởi tạo để NULL rõ ràng để được an toàn (và rõ ràng), nhưng, như nó đứng, giá trị của PB sau khi xây dựng của A là gì? Nó có được khởi tạo mặc định (không bằng 0) hay không (nghĩa là không xác định và bất kỳ thứ gì trong bộ nhớ). Tôi nhận ra initialisation trong C++ có một vài quy tắc công bằng.
Tôi nghĩ nó không được khởi tạo mặc định; như chạy trong chế độ gỡ lỗi trong Visual Studio nó đã thiết lập pB trỏ đến 0xcdcdcdcd - có nghĩa là bộ nhớ đã được new'd (trên heap) nhưng không được khởi tạo. Tuy nhiên trong chế độ phát hành, pB luôn trỏ đến NULL. Đây chỉ là tình cờ, và do đó không được dựa vào; hoặc là những trình biên dịch khởi tạo nó cho tôi (ngay cả khi nó không phải trong tiêu chuẩn)? Nó cũng có vẻ là NULL khi biên dịch với trình biên dịch của Sun trên Solaris.
Tôi thực sự đang tìm kiếm một tham chiếu cụ thể cho tiêu chuẩn để nói theo cách này hay cách khác.
Cảm ơn.
Không xác định (và một số trình biên dịch sẽ cảnh báo), nhưng tôi không có chuẩn C++ tiện dụng ... – ephemient
B là một con trỏ ngẫu nhiên vào tự nhiên. Chú thích. Trong chế độ gỡ lỗi, hầu hết trình biên dịch sẽ khởi tạo nó thành NULL (được cho là để giúp gỡ lỗi). Nhưng trong chế độ phát hành nó sẽ có giá trị trước đó trong bộ nhớ. –