Bu yasadışı/tehlikeli midir?Statik Değişken İşaretçi?
int* static_nonew()
{
static int n = 5;
return &n;
}
derleyici onunla bir sorun var gibi görünmüyor, ama başkası bellek gerektiğinde üzerine gelen korunmuş işaretçi konumu kendisidir?
DÜZENLEME: Bu soruyu neden sorduğumu açıklayan bir açıklama. Not: C++ ile programlama yapıyorum, C olarak etiketledim çünkü C++ sorusundan daha fazla C gibi görünüyordu.
Statik bir harita döndürmesi gereken bir dersim var. Sadece bu harita üzerinde bir kere başlatılmış olmasını istiyorum, çünkü birden çok kez yapılmasına gerek yok. Geçiş sınıfları yapıcı geçişler kendisini eklersiniz
static std::map<std::string, Transition*> transitions;
static Transition trans1(transitions, ...);
static Transition trans2(transitions, ...);
return &transitions;
: Bu nedenle, böyle bir şey var olacaktı. Bu şekilde, geçişleri bir kere oluşturacak ve onlara bir işaretçi getirecektir. Ben sadece yığın üzerinde tahsis edilen bir değişkene bir referans oluşturursanız, çok kolay üzerine yazılabilir ve "güvensiz" olduğunu hatırlıyorum. Bir işlev içinde yaratılan statik değişkenlerin tam olarak nasıl işlediği ile kafam karışmıştı.
Haritanızın istemci kodu tarafından değiştirilmesi beklenmiyorsa, bir const referansı veya const'e bir işaretçi döndürmeniz gerekir. Bu, statik verilerle ilişkili risklerin çoğunu ortadan kaldıracaktır. –