01/10/2018, 00:38

Thắc Mắc Về operator và constructor

Sau khi chạy xong các phép tính trong toán tử operator +
thì nó lại chạy về hàm khởi tạo
MyString::MyString(const MyString &tmp)
để khởi tạo cái ms3. trong (tmp) của E return về đã có giá trị( ___abcdf) nhưng khi chạy vô khởi tạo một lần nữa nó lại nói là , error reading char of string ,
Đây là đoạn code của E. : http://codepad.org/sPpykzXa
Mong ai đó giải đáp thắc mắc ~.~
Em cảm ơn

Tao Không Ngu. viết 02:50 ngày 01/10/2018

Khi gọi phép cộng sâu và MyString thì thực tế là gọi hàm

friend MyString& operator+(const char*str1, const  MyString ms1)

Khi bạn chuyền vào ms1 do là truyền tham trị nên khi đó gọi hàm tạo sao chép để truyền đối vào

MyString::MyString(const MyString &tmp)

```.

Sau khi cộng song được một đối tượng rs. Bạn trả về tham chiếu của rs.
sau đó gọi hàm tạo sao chép 1 lần nữa để gán thàm chiếu này cho ms2. Tuy nhiên vì rs là biến cụ bộ trong hàm nên sau đó nó bị giải phóng. Dẫn đến tham chiếu trả về tham chiếu đên 1 vùng nhớ không đúng. Và sau đó hàm strleng() bị lỗi.
Tao Không Ngu. viết 02:42 ngày 01/10/2018

Code của bạn đang gặp vấn đề khi sử dụng tham chiếu một cách bừa bãi. @_@!

Tao Không Ngu. viết 02:55 ngày 01/10/2018
    MyString(); // Bạn nên gán con trỏ null trong này.
    ~MyString(); // Chưa giải phóng.
    MyString& operator=(const MyString mS) // Trả về tham chiếu ??? Tại sao ?
Bài liên quan
0