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

c++ - Liên kết đối tượng và liên kết con trỏ

In lại Tác giả: Walker 123 Thời gian cập nhật: 27-11-2023 22:58:28 31 4
mua khóa gpt4 Nike

Nếu tôi có hai cấu trúc hàng liên kết:

cấu trúc A {
MỘT() {}
~A() {}
công đoàn {
vector vi;
vectơ db;
};
};

cấu trúc B {
công đoàn {
vector * vi;
vectơ * db;
};
};

Tôi biết tôi phải làm việc với họ theo cách khác, ví dụ:

Một;
vectơ (&a.vi) mới;

sự tương phản

Bb;
b.vi = vectơ mới();

Ngoài ra, phương pháp đầu tiên (liên minh không hạn chế) có bất kỳ lợi thế nào đối với cách tiếp cận thứ hai (chỉ lưu một con trỏ vào vectơ hiện tại) không? Hay chúng giống nhau về chức năng và hiệu suất, điểm khác biệt duy nhất là cách tôi sử dụng chúng?

EDIT: Mã gốc là một ví dụ tối giản không cần biên dịch, tôi đã thêm vào cấu trúc A MỘT() {}~A() {} để làm cho nó chính xác và có thể biên dịch được.

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

tôi đã thêm MỘT() {}~A() {} TRONG MỘT struct để làm cho nó chính xác và có thể biên dịch được.

Việc thêm các hàm tạo và hàm hủy làm cho mã của bạn có thể biên dịch được nhưng không làm cho mã chính xác. Vấn đề cố hữu trong ví dụ ban đầu vẫn tồn tại: trình biên dịch không biết phải làm gì với sự đoàn kết nỗi nhớ phía sau.

Cả hai vectơ đều quản lý bộ nhớ riêng của chúng. vi con trỏ quản lý int con trỏ, trong khi db con trỏ quản lý gấp đôi con trỏ. Cả hai vectơ đều được đặt ở cùng một vị trí trong bộ nhớ, do đó con trỏ của chúng được chia sẻ. Khi được cấp phát, sao chép hoặc tiêu hủy MỘT Khi , trình biên dịch không biết nên gọi hàm nào - Đ::vi hoặc Đáp::Cơ sở dữ liệu.

Mặc dù bạn có thể làm cho nó hoạt động bằng cách xác định tất cả các hàm đặc biệt để quản lý tài nguyên (hàm tạo/hàm tạo sao chép/hàm tạo di chuyển/hàm hủy), đây là một bài tập rất quan trọng và dẫn đến mã rất dễ vỡ. Vấn đề là mỗi lần sự đoàn kết Khi bạn thêm thành viên mới, mã phải thay đổi nhưng trình biên dịch không có cách nào nhắc nhở bạn. Mã cũ được biên dịch, nhưng khi bạn chỉ định thành viên mới và sao chép liên kết chứa nó, nó sẽ gây ra hành vi không xác định.

Về c++ - liên kết đối tượng và liên kết con trỏ, 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/30163038/

31 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