Cách hoạt động của lệnh New trong ngôn ngữ lập trình C++?
C/C++ thuộc nhóm ngôn ngữ đáng học nhất trong ngành công nghệ thông tin khi đã có những đóng góp to lớn cho nền lập trình trên toàn thế giới. Vậy bạn đã thực sự hiểu hết về các lệnh phổ biến trong C++ ? Hãy cùng FUNiX tìm hiểu sâu hơn về hàm New trong C++ qua bài viết dưới đây.
- Tất tần tật về lập trình phần mềm cho dân không chuyên
- Hướng dẫn tự học lập trình Python online đơn giản nhất
- Lập trình PHP là gì? Cơ hội nghề nghiệp ngành lập trình PHP
- Lập trình PLC đèn giao thông là gì? Đặc điểm của lập trình PLC đèn giao thông
- Lập trình PHP có khó không? Học lập trình PHP cần những điều kiện gì?
Table of Contents
Năm 2021, một phân tích của TIOBE chỉ ra rằng, có tới 14.32% lượt bình chọn cho ngôn ngữ C/C++ về chủ đề top các ngôn ngữ lập trình được yêu thích nhất hiện nay. Tính đến thời điểm này, C/C++ thuộc nhóm ngôn ngữ đáng học nhất trong ngành công nghệ thông tin khi đã có những đóng góp to lớn cho nền lập trình trên toàn thế giới. Vậy bạn đã thực sự hiểu hết về các lệnh phổ biến trong C++ ? Hãy cùng FUNiX tìm hiểu sâu hơn về hàm New trong C++ qua bài viết dưới đây.
1. Giới thiệu về tính năng New trong C++
New là một toán tử (operator) trong C++ yêu cầu cấp phát bộ nhớ trên vùng heap của ngăn xếp Stack (cấu trúc lưu trữ dữ liệu). Nếu không đủ bộ nhớ sẵn có, toán tử New sẽ khởi tạo bộ nhớ và sẽ trả về địa chỉ các bộ nhớ mới được cấp phát cùng với việc khởi tạo bộ nhớ cho biến con trỏ (pointer). Khi một object mới được tạo, luôn cần có bộ nhớ để cấp phát cho đối tượng từ vùng heap của ngăn xếp stack và constructor – thành viên đặc biệt của class được kích hoạt sau khi bộ nhớ được cấp phát.
>>> Xem thêm: Mách bạn lập trình game cần học những gì 2023
2. Các toán tử New hoạt động như thế nào trong C++?
Toán tử New là một hàm được sử dụng để cấp phát bộ nhớ và về mặt khái niệm đây là một bit nhỏ hơn hàm malloc() trong C (Memory Allocation: bộ nhớ cấp phát). Malloc là phương pháp ghi đè lên vùng nhớ cấp phát Heap theo mặc định. Nó không khởi tạo bất kỳ vùng nhớ nào đồng nghĩa rằng nó không chứa Constructor (hàm), nhưng khi màn hình thông báo toán tử trở nên quá tải, nó sẽ trả về giá trị mới và sau đó trình biên dịch tự động (compiler) sẽ sử dụng đến Constructor nếu có. Việc quá tải của toán tử New có thể được xử lý một cách toàn diện hoặc đơn giản chỉ áp dụng đối với một class nhất định.
Biểu thức New (biểu thức chứa toán tử New) thực hiện ba việc:
- Định vị và dự trữ lưu trữ cho đối tượng hoặc các object được cấp phát. Khi giai đoạn này hoàn tất, dung lượng lưu trữ chính xác sẽ được phân bổ.
- Khởi tạo (các) object. Khi quá trình khởi tạo hoàn tất, có đủ thông tin để lưu trữ được cấp phát trở thành một object.
- Trả về một con trỏ (pointer) đến object của kiểu con trỏ dẫn xuất từ new-type-id hoặc type-id. Chương trình lập trình sử dụng con trỏ này để truy cập đối tượng New được cấp phát.
2.1 Phân bổ dung lượng lưu trữ
Nhiệm vụ hay mục tiêu chính của toán tử New là phân bổ các không gian lưu trữ dữ liệu với các chức năng phân bổ mặc định (default allocation functions). Các chức năng phân bổ mặc định được đề cập ở trên sẽ bao gồm throwing allocation, nothrow allocation và placement. Throwing allocation được xem như một phần của toán tử New dùng để Xử lý các byte có kích thước được phân bổ cho không gian lưu trữ và sau đó nó được gắn một cách thích hợp với object có kích thước tương tự để trả về bất kì non-null pointer nào đó cho byte đầu tiên của khối thông tin (block). Sau đó nếu trong trường hợp phân bổ không thành công, màn hình sẽ báo lỗi bad_alloc.
Trong trường hợp phân bổ nothrow, behavior hay exception throw được xem là tương đương nhau mặc dù nó sẽ trả về lỗi ngoại lệ NullpointerException. Cuối cùng, hãy hình dung placement như một phân bổ lưu trữ mặc định (default allocation of storage) chỉ trả về ptr trong đó không có lưu trữ nào được cấp phát và sau đó nếu hàm được gọi bởi một biểu thức New thì cần thực hiện khởi tạo thích hợp với thực tế là nó bao gồm để xây dựng hàm tạo mặc định (default constructor).
>>> Đọc thêm: Tất tần tật thông tin về cách lập trình game bằng Python
2.2 Khởi tạo các đối tượng
Trong ngôn ngữ lập trình C++, New được xem là một toán tử có hành vi rất chính xác. Nhiệm vụ của nó là làm xuất hiện biểu thức với toán tử New và hàm (Function) với kích thước của kiểu dữ liệu mà nó chỉ định cho đối số đầu tiên. Nếu trong trường hợp chạy hàm (Function) thành công, lệnh New sẽ tự động hình thành và sẽ bắt đầu khởi tạo Constructor cho object.
Các hàm tạo mặc định (default constructors) đóng một vai trò chính trong toán tử New với việc cấp phát và định vị các hàm với các thành phần đặc biệt trong thư viện tiêu chuẩn, bao gồm một số tính năng tối ưu Global. Tính năng này bao gồm tất cả ba phiên bản của toán tử và được sử dụng để khai báo trong không gian tên chung với các hàm ngầm định và có thể thay thế chủ yếu hoạt động như một phần của toán tử New. Tất cả các tham số và giá trị kiểu trả về cho phiên bản thứ nhất và thứ hai đều có con trỏ dẫn đến không gian lưu trữ mới được cấp phát, những vùng chứa ptr sẽ được xem như kiểu trả về cho toán tử New liên quan tới cấp phát không gian.
Bất cứ khi nào lệnh New xuất hiện trên màn hình, nó sẽ gợi ý rằng cần cấp phát bộ nhớ cho biến hiện tại đang được xem xét. Có một sự khác biệt giữa toán tử và toán tử New trong thực tế là toán tử New sẽ bao gồm việc thực hiện cả cấp phát bộ nhớ và khởi tạo trong khi toán tử chỉ thực hiện cấp phát.
2.3 Sử dụng con trỏ để truy cập đối tượng mới
Việc sử dụng toán tử New biểu thị một yêu cầu cấp phát bộ nhớ trên heap. Nếu có đủ bộ nhớ, nó sẽ khởi tạo bộ nhớ và trả về địa chỉ của nó cho biến con trỏ. Toán tử New chỉ nên được sử dụng nếu đối tượng dữ liệu vẫn còn trong bộ nhớ cho đến khi lệnh Delete hiển thị. Ngược lại, nếu lập trình viên không sử dụng toán tử New, đối tượng sẽ tự động bị hủy khi nó vượt ra ngoài phạm vi cho phép. Cũng có một số khác biệt cần được lưu ý như new là một toán tử cũng như một từ khóa trong đó toán tử new chỉ là một function (hàm).
>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:
>> Xem thêm bài viết:
Top 5+ Ứng dụng game điện thoại và PC hay nhất mọi thời đại
Xu hướng phát triển nghề lập trình Game blockchain
5 Điểm đáng chú ý tại khóa học lập trình trực tuyến FPT – FUNiX
Từ A-Z chương trình học FUNiX – Mô hình đào tạo lập trình trực tuyến số 1 Việt Nam
Lý do phổ biến khiến học viên nước ngoài chọn FUNiX
Bài gốc: https://www.educba.com/new-in-c-plus-plus/?source=leftnav
Nguyễn Huyền (theo Educba.com)
Bình luận (0
)