Điều này có hợp pháp/nguy hiểm không?Con trỏ biến tĩnh?
int* static_nonew()
{
static int n = 5;
return &n;
}
Trình biên dịch dường như không có vấn đề gì với nó, nhưng bản thân vị trí con trỏ có được bảo vệ khỏi bị ghi đè khi người khác cần bộ nhớ không?
EDIT: Một chút giải thích thêm về lý do tôi hỏi câu hỏi này. Lưu ý: Tôi đang lập trình trong C++, tôi chỉ gắn thẻ nó là C vì nó dường như có nhiều câu hỏi C hơn C++.
Tôi có một lớp học có nghĩa vụ trả lại bản đồ tĩnh. Tôi chỉ muốn bản đồ này được khởi tạo một lần trong suốt chương trình vì dường như không cần phải làm nhiều lần. Vì lý do này, tôi sẽ có một cái gì đó như thế này:
static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;
Trình tạo lớp chuyển tiếp sẽ tự thêm vào quá trình chuyển đổi. Theo cách đó, nó sẽ tạo ra các chuyển đổi một lần và sau đó trả về một con trỏ cho chúng. Tôi chỉ nhớ rằng nếu bạn tạo một tham chiếu đến một biến được phân bổ trên ngăn xếp, nó có thể bị ghi đè rất dễ dàng và "không an toàn". Tôi chỉ là một chút nhầm lẫn với chính xác như thế nào các biến tĩnh được tạo ra trong một chức năng làm việc.
Nếu bản đồ của bạn không được dự kiến sẽ bị thay đổi bởi mã máy khách, bạn phải trả về tham chiếu const hoặc một con trỏ tới một const. Điều đó sẽ loại bỏ hầu hết các rủi ro liên quan đến dữ liệu tĩnh. –