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
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí