Nếu tôi có một con trỏ tới một cấu trúc/đối tượng và cấu trúc/đối tượng đó chứa hai con trỏ khác tới các đối tượng khác và tôi muốn xóa đối tượng chứa hai con trỏ này mà không hủy các con trỏ mà nó giữ - Tôi phải làm điều này như thế nào?
Con trỏ tới đối tượng A (chứa con trỏ tới đối tượng B, chứa con trỏ tới đối tượng C). Khi đối tượng A bị xóa, con trỏ tới đối tượng A cũng bị xóa nhưng con trỏ tới đối tượng B/C vẫn tồn tại.
Tôi có phải làm gì để thực hiện công việc này không?
gia hạn
Đây là một dự án trò chơi, tôi hy vọng điều này giải thích được điều đó. Bây giờ, ngay cả khi tôi đặt hai con trỏ tới B, C trong Struct (A) đầu tiên, tôi cũng gặp một số "vấn đề"
người chơi cấu trúc
{
ký tự * Tên;
Vũ khí* Người chơiVũ khí;
Giáp* Người chơiGiáp;
};
cấu trúc vũ khí
{
ký tự * Tên;
int Thiệt hại;
};
cấu trúc áo giáp
{
ký tự * Tên;
kháng chiến int;
};
Điều này không hoạt động ở một mức độ nào đó.
Người chơi* CreatePlayer(char * Tên, Vũ khí* vũ khí, Áo giáp* áo giáp)
{
Người chơi *pPlayer = Người chơi mới;
pPlayer->Tên = tên;
pPlayer->Vũ khí = vũ khí;
pPlayer->Áo giáp = áo giáp;
};
Trang bị không nên bị xóa sau này khi người chơi "chết".
Con trỏ (B & C) chứa trong con trỏ (A) sẽ không bị xóa trừ khi bạn thực hiện điều đó một cách rõ ràng thông qua hàm hủy. Nhưng một khi con trỏ A bị xóa, con trỏ A không còn có thể được sử dụng để truy cập B&C nữa.
Lưu ý: Bạn nên sử dụng hàm tạo sao chép và toán tử = quá tải trong lớp A để tránh sao chép nông.
Nếu bạn muốn sử dụng cùng loại áo giáp và vũ khí cho những người chơi khác, hãy đảm bảo rằng bạn không xóa vũ khí và áo giáp trong hàm hủy diệt của người chơi. Sau đó, bạn có thể sử dụng con trỏ tương tự trên một trình phát khác như thế này.
Vũ khí* vũ khí = CreateWeapon();
Giáp* giáp = CreateArmor();
Người chơi* player1 = CreatePlayer("Alpha", vũ khí, áo giáp);
xóa người chơi1;
Người chơi* player2 = CreatePlayer("Beta", vũ khí, áo giáp);
xóa player2;
Tôi là một lập trình viên xuất sắc, rất giỏi!