cuốn sách gpt4 ai đã làm

Tại sao toán tử gán gọi hàm tạo?

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 15:03:52 26 4
mua khóa gpt4 Nike

Tôi chỉ đang loay hoay tìm hiểu về con trỏ thông minh và cố gắng tạo ra con trỏ thông minh cho riêng mình, nhưng tôi đã gặp phải một tình huống mà tôi không hiểu hết. Đây là mã:

#include 
mẫu
người giữ lớp
{
private:
T * đối tượng;
public:
Người giữ(T * tt): obj(tt)
{
std::cout << "ctor : " << tt->dummy << std::endl;
}
Toán tử T* -> ()
{
trả lại đối tượng;
}
toán tử bool()
{
trả lại đối tượng;
}
T * const get() const
{
trả lại đối tượng;
}
void reset() {hoán đổi (0);}
trao đổi void(T * other)
{
obj = khác;
}
Người giữ & người vận hành = (const Người giữ& người giữ)
{
obj = chủ.get();
return *this;
}
Người giữ(const Người giữ & người giữ): obj(holder.get()) {}
};

hạng A
{
public:
int giả;
A(int a): giả(a) {}
};

int chính()
{
A * a = mới A(1);
Giá đỡ giá đỡ(a);
A * b = mới A(2);
người giữ = b;

std::cout << người giữ-> giả << std::endl;

return 0;
}

Mã biên dịch và người giữ = b; cuộc gọi đường dây Người giữ Trình xây dựng lớp. Tôi tưởng trình biên dịch sẽ báo lỗi. Nếu nó không phải là toán tử gán thì tại sao chúng ta phải gọi hàm tạo?

câu trả lời hay nhất

người giữ = bcố gắng bắt đầu từ b được giao cho Người giữ . bLoại là MỘT* , 和 người giữLoại là Giá đỡ .

Người giữĐịnh nghĩa mẫu xuất phát từ cùng một Người giữ kiểu gán của một phiên bản khác của , vì vậy trình biên dịch bắt đầu bằng MỘT* đang tìm kiếm mộtChuyển thànhGiá đỡ .it tìm hàm tạo và sử dụng nó.

Các hàm tạo chỉ chấp nhận một tham số có thể được sử dụng cho các chuyển đổi ngầm định,Trừ khiBạn sử dụng rõ ràng Gắn thẻ từ khóa cho chúng.

Giới thiệu về c++ - Tại sao toán tử gán gọi hàm tạo? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/4383015/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress