Câu trả lời ngắn sẽ được sử dụng một std :: vector với kích thước ban đầu của 1024.
std::vector<int> a(1024); // Uses the types default constructor, "T()".
Giá trị ban đầu của tất cả các yếu tố của "a" sẽ là 0, như std :: vector (constructor) (kích thước) (cũng như vector :: resize) sao chép giá trị của hàm tạo mặc định cho tất cả các phần tử.Đối với các loại built-in (aka loại nội tại, hoặc PODs), bạn được đảm bảo giá trị ban đầu là 0:
int x = int(); // x == 0
này sẽ cho phép các kiểu đó "a" sử dụng để thay đổi với fuss tối thiểu, thậm chí đó của một lớp học.
Hầu hết các hàm có con trỏ void (void *) làm tham số, chẳng hạn như memset, không được nhập an toàn. Bỏ qua kiểu của một đối tượng, theo cách này, loại bỏ tất cả các đối tượng ngữ nghĩa kiểu C++ có xu hướng dựa vào, chẳng hạn như xây dựng, hủy và sao chép. memset làm cho các giả định về một lớp, vi phạm trừu tượng (không biết hoặc quan tâm những gì bên trong một lớp). Mặc dù vi phạm này không phải luôn luôn rõ ràng ngay lập tức, đặc biệt là với các loại nội tại, nó có khả năng dẫn đến khó xác định lỗi, đặc biệt khi cơ sở mã phát triển và thay đổi tay. Nếu kiểu đó là memset là một lớp với một vtable (các hàm ảo) nó cũng sẽ ghi đè lên dữ liệu đó.
Bạn có thể đưa ra lý do tại sao bạn nghĩ người ta không nên ghi nhớ trong C++? Tôi không biết tại sao làm memset nên dẫn đến bất kỳ vấn đề trong C + +. Hãy sửa tôi nếu tôi sai. Cảm ơn! – Jay
Có thể anh ấy đã nghe nó trong ngữ cảnh "không sử dụng memset để không xuất hiện đối tượng lớp". –
@Jay: Chúng ở trên là OK. Nhưng việc sử dụng memset để không phải là đối tượng lớp (không chỉ là một thành viên) cũng không phải là một ý tưởng hay. Điều này đặc biệt là problomatic nếu đối tượng chứa các thành viên có các hàm tạo (thực hiện một số khởi tạo). –