This MSDN page đề cập đến các phiên bản không có phiên bản new
và delete
. nothrow new
là một điều khá nổi tiếng - trả về null thay vì ném một ngoại lệ nếu phân bổ bộ nhớ không thành công. Nhưng nothrow delete
được đề cập ở đây là gì?Điều gì sẽ không được xóa trong C++?
Trả lời
Chúng có thể đề cập đến các chức năng cấp phát bộ nhớ thô operator new
và operator delete
.
Khi bạn gọi một phiên bản cụ thể của vị trí mới thể hiện (tức là mới thể hiện với các thông số phụ; tất cả đều được chính thức gọi là vị trí hình thức new
) và chức năng phân bổ bộ nhớ operator new
thành công, nhưng quá trình thất bại sau đó vì một số lý do khác (các nhà xây dựng ném), việc thực hiện phải hủy bỏ quá trình và tự động giải phóng bộ nhớ được cấp phát bằng cách gọi phiên bản thích hợp của operator delete
. "Phiên bản phù hợp" của operator delete
trong trường hợp này là phiên bản có cùng một bộ thông số như hàm operator new
trước đây được sử dụng để cấp phát bộ nhớ (ngoại trừ tham số đầu tiên, tất nhiên).
Điều này cũng áp dụng cho nothrow
phiên bản của operator new
. Khi bạn sử dụng hình thức biểu thức mới nothrow
, nó gọi một phiên bản nothrow
của operator new
và sau đó xây dựng đối tượng trong bộ nhớ được cấp phát. Nếu nhà xây dựng không thành công (ném), việc triển khai bộ nhớ phát hành biểu thức mới được phân bổ với sự giúp đỡ của nothrow
phiên bản operator delete
. Đây là lý do duy nhất cho phiên bản operator delete
này tồn tại.
Nói cách khác, phiên bản nothrow
của operator delete
tồn tại cho các mục đích nội bộ rất cụ thể. Bạn không nên bình thường muốn gọi nó là chính mình và, có thể, bạn không thực sự cần phải biết về sự tồn tại của nó. Tuy nhiên, bạn nên biết rằng vì những lý do được mô tả ở trên, bất cứ khi nào bạn tạo phiên bản operator new
của riêng mình với thông số bổ sung, bạn nên cung cấp phiên bản phù hợp operator delete
với cùng một tập hợp các thông số bổ sung.
- 1. Điều gì sẽ 'std :;' làm trong c + +?
- 2. Nếu không xóa biến ThreadLocal, Điều gì sẽ xảy ra?
- 3. Điều gì sẽ được đặt vào AssemblyTrademarkAttribute?
- 4. Điều gì sẽ được() tương đương trong C11?
- 5. Trong JavaScript, điều gì sẽ xảy ra nếu "xóa" một thuộc tính không tồn tại?
- 6. HttpContext.Current.Cache - Khi nào điều này sẽ tự động được xóa?
- 7. Điều gì sẽ xảy ra trong bộ nhớ khi lớp C++ được khởi tạo
- 8. Điều gì sẽ xảy ra khi ném ngoại lệ C++?
- 9. Điều gì sẽ thay đổi số config.assets.version?
- 10. Điều gì sẽ được sử dụng để quản lý phiên?
- 11. Điều gì sẽ là một sự thay thế tốt cho vector C++ trong C#?
- 12. C++ 11 tự động: điều gì sẽ xảy ra nếu nó được tham chiếu liên tục?
- 13. Điều gì sẽ xảy ra nếu tôi không đóng System.Diagnostics.Process trong ứng dụng giao diện điều khiển C# của tôi?
- 14. Điều gì sẽ xảy ra khi bạn đóng ứng dụng bảng điều khiển C++
- 15. Tôi sẽ sử dụng điều gì để xóa html thoát khỏi các tập dữ liệu lớn
- 16. Điều gì sẽ xảy ra trong tương lai của C# trong 10 năm tới?
- 17. Điều gì sẽ xảy ra với cơ sở dữ liệu Sqlite khi ứng dụng bị xóa
- 18. Điều gì sẽ xảy ra nếu khung bị xóa khỏi ứng dụng?
- 19. Điều gì sẽ xảy ra khi bạn gọi một phương thức tĩnh trong C#?
- 20. Điều gì được giữ lại trong mục tiêu-C?
- 21. Điều gì sẽ tương đương với Win32 API trong Linux?
- 22. Điều gì sẽ sử dụng làm đường phím trong KVO?
- 23. Điều gì sẽ xảy ra khi gán cấu trúc mới cho mảng trong C#?
- 24. Điều gì sẽ xảy ra với kết nối cơ sở dữ liệu không được đính kèm?
- 25. Điều gì sẽ sở hữu mô hình trong mẫu MVC?
- 26. Điều gì xảy ra từ ngày 1 có thể vì UDID sẽ không được phép?
- 27. Điều gì sẽ xảy ra khi chuyển tham chiếu đến chữ trong C++?
- 28. Điều gì sẽ xảy ra với các trường không được đặt tên bởi trình khởi tạo được chỉ định?
- 29. Memcache sẽ không xóa hoặc xóa bộ nhớ
- 30. Điều gì sẽ xảy ra nếu đối tượng mẫu mới không được gán cho một biến?