Tôi là một nhà phát triển C dày dạn, hiện đang tham gia vào C++ và tôi phải thừa nhận, tôi rất bối rối về việc có bao nhiêu cách để tạo, lưu giữ và hủy các đối tượng C++. Trong C, cuộc sống rất đơn giản: phân công với =
bản sao trên ngăn xếp và malloc
/free
quản lý dữ liệu trên heap. C + + là xa đó, hoặc vì vậy nó có vẻ với tôi.Vòng đời của đối tượng C++ là gì?
Trong ánh sáng đó, đây là những câu hỏi của tôi:
- gì tất cả những cách để tạo ra một đối tượng C++? Trực tiếp/sao chép constructor, phân công, vv Làm thế nào để họ làm việc?
- Tất cả các cú pháp khởi tạo khác nhau được liên kết với tất cả các loại tạo đối tượng này là gì? Sự khác nhau giữa
T f = x
,T f(x);
,T f{x};
, v.v. là gì? - Quan trọng nhất, khi là chính xác để sao chép/gán/bất cứ điều gì
=
có trong C++ và khi nào bạn muốn sử dụng con trỏ? Trong C, tôi đã rất quen với việc ném các con trỏ quanh một số lô, bởi vì gán con trỏ là rẻ nhưng việc sao chép cấu trúc lại ít hơn. Làm thế nào để ngữ nghĩa sao chép của C++ ảnh hưởng đến điều này? - Cuối cùng, tất cả những điều này như thế nào là
shared_ptr
,weak_ptr
, v.v ...?
Tôi xin lỗi nếu đây là một câu hỏi khá rộng, nhưng tôi rất bối rối khi sử dụng cái gì (thậm chí không nhắc đến sự nhầm lẫn của tôi về quản lý bộ nhớ trong bộ sưu tập và toán tử new
). mọi thứ tôi biết về quản lý bộ nhớ C bị hỏng trong C++. Đó có phải là sự thật, hay là mô hình tâm thần của tôi sai?
Để tổng hợp mọi thứ: các đối tượng C++ được tạo, khởi tạo và hủy như thế nào và khi nào tôi nên sử dụng từng phương pháp?
bạn có quan tâm đến C++ 03 hoặc trong C++ 11 không? – Alex
Bạn có lẽ nên chia nhỏ thành các bài đăng nhỏ hơn, một câu hỏi duy nhất. – juanchopanza
Tôi nhớ đọc về chúng trong nguyên tắc của tôi về ngôn ngữ lập trình khóa học – pinkpanther