Giả sử tôi có một struct ++ C có cả POD và phi POD biến thành viên:Có cách nào để tạo giá trị cấu trúc C++-initialize tất cả các biến thành viên POD không?
struct Struct {
std::string String;
int Int;
};
và để cho chương trình của tôi để tạo ra hành vi reproduceable Tôi muốn có tất cả các biến thành viên được khởi tạo ở xây dựng. Tôi có thể sử dụng một danh sách initializer cho rằng:
Struct::Struct() : Int() {}
vấn đề là ngay sau khi tôi cần phải thay đổi cấu trúc của tôi và thêm một biến thành viên POD mới (nói bool Bool
) Tôi có nguy cơ quên để thêm nó vào danh sách khởi tạo. Sau đó, biến thành viên mới sẽ không được khởi tạo giá trị trong khi xây dựng cấu trúc.
Ngoài ra tôi không thể sử dụng memset()
lừa:
Struct::Struct()
{
memset(this, 0, sizeof(*this)); //can break non-POD member variables
}
vì gọi memset()
ghi đè lên các biến thành viên POD phi đã xây dựng có thể phá vỡ những.
Có cách nào để thực thi khởi tạo giá trị của tất cả các biến thành viên POD mà không thêm rõ ràng quá trình khởi tạo trong trường hợp này không?
Tôi muốn giới thiệu từng thành viên là 'const'. Đặc biệt là khi họ là tất cả 'công khai' nó thực sự có ý nghĩa để buộc bất biến. Bạn có thể sử dụng cú pháp khởi tạo mảng để tạo các cá thể: 'Struct s = {" ... ", 0};' –
@Daniel: Và khi tôi muốn đặt nó vào một thùng chứa? – GManNickG
@GMan: Tôi sẽ đặt nó trong một 'std :: shared_ptr' trong trường hợp này. Hoặc có thể quyết định đóng gói đúng các thành viên và xóa 'const'. –