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

Cảnh báo "đích của lệnh gọi ' memcpy' này là một con trỏ tới lớp động ..." hiển thị khi memcpying từ đối tượng này đến một đối tượng mới trong một lớp con

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 10:25:14 36 4
mua khóa gpt4 Nike

Tôi sẽ tạo một số lớp cha và lớp con có chức năng sao chép ảo, trả về một bản sao của chính nó:

hạng A{
public:
ID int;
bản sao A* ảo(){
trả về A mới();
}
}

lớp B : công cộng A{
public:
int ID phụ;
bản sao A* ảo(){
B* b=mới B();
memcpy(b,this,sizeof(B));
return b;
}
};

Khi biên dịch, cảnh báo sau được hiển thị:

đích cho lệnh gọi 'memcpy' này là một con trỏ tới lớp động 'B'; con trỏ vtable sẽ bị ghi đè;
bỏ con trỏ một cách rõ ràng để tắt cảnh báo này

Cảnh báo này có ý nghĩa gì và nó có thể gây ra những vấn đề gì?

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

Nó có nghĩa là điều này sẽ không hoạt động. Không nên sử dụng thư viện C memcpy() sao chép một đối tượng C++ (ngoại trừ một số trường hợp hạn chế), hàm này không biết gì về các lớp C++, hàm tạo, hàm hủy, phương thức ảo và mọi thứ khác trong C++ không có trong C.

những gì bạn muốn là mộtsao chép hàm tạo .Nó thực hiện chính xác những gì bạn muốn: tạo một bản sao của một đối tượng hiện có.

bản sao A* ảo(){
B* b=mới B(*cái này);
return b;
}

Về c++ - khi ghi nhớ từ đối tượng này sang một đối tượng mới trong một lớp con, cảnh báo "đích cho lệnh gọi ' memcpy' này là một con trỏ tới lớp động ..." xuất hiện, 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/37913814/

36 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
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