0

Struct trong struct hay con trỏ đến struct – cách chọn đúng?

🧱 1. Nhúng trực tiếp struct A vào trong struct B

struct A {
    int x;
};

struct B {
    struct A a;  // nhúng trực tiếp
};

📌Dùng khi:

  • Struct A là thành phần bắt buộc của B, luôn tồn tại cùng B.
  • Không cần cấp phát động hay quản lý bộ nhớ riêng cho A.
  • Hiệu năng quan trọng: truy cập nhanh, không qua con trỏ.

✅ Ưu điểm

  • Dễ dùng, không cần malloc hay free.
  • Không lo rò rỉ bộ nhớ.
  • Dữ liệu nằm liền mạch trong bộ nhớ → cache-friendly.

❌ Nhược điểm:

  • Không thể chia sẻ A giữa nhiều B.
  • Không linh hoạt nếu A có kích thước lớn hoặc thay đổi động.

🧷 2. Dùng con trỏ đến struct A trong struct B

struct A {
    int x;
};

struct B {
    struct A* a;  // con trỏ
};

📌 Dùng khi:

  • A là tùy chọn, có thể có hoặc không.
  • A có thể được chia sẻ giữa nhiều B.
  • A có thể thay đổi kích thước hoặc cấu trúc động.
  • Cần trì hoãn khởi tạo A .
  • Muốn đa hình (struct A có thể là nhiều kiểu khác nhau qua con trỏ).

✅Ưu điểm:

  • Linh hoạt trong quản lý bộ nhớ.
  • Có thể thay thế A mà không thay đổi B.
  • Hữu ích trong các cấu trúc phức tạp như cây, danh sách liên kết, v.v.

❌ Nhược điểm:

  • Cần quản lý bộ nhớ thủ công (malloc, free).
  • Dễ gây rò rỉ bộ nhớ hoặc lỗi truy cập nếu không cẩn thận.
  • Truy cập chậm hơn một chút do phải qua con trỏ.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.