жаһандық айнымалылар жадыны қашан бөледі?

Бұл мені біраз уақыт мазалады, бірақ мен бұл мәселе бойынша жақсы ресурс таппадым. Менің кодымда глобальды айнымалылар бар. Олар белгілі бір тәртіпте инициализацияланғандығы анық, бірақ инициализация болғанға дейін барлық осы объектілер үшін есте сақтау қажет пе?

бұл жерде менің кодымда қандай қателіктер болуы мүмкін және оның жауабын қалай қолдануға болатындығы туралы қарапайым мысал келтірілген:

Менде картасы бар objectPool , онда менің кодымда әр сыныптың үлгілері бар, мен файлдарды объектілерден жүктейтін едім. Осы үлгілерді жасау үшін мен кейбір жаһандық айнымалыларды objectPool-ға сынып данасын енгізу үшін қолданамын.Бірақ кейде мұндай даналар ObjectPool-дан бұрын инициализацияланған. Бұл жұмыс уақытында қате тудырды.

Бұл қатені түзету үшін мен кейбір кешіктірілген инициализаторды қолдандым map * lateInitializedObjectPool; . Енді әрбір инстанция алдымен objectPool инициализацияланғанын тексеріп, егер жоқ болса, оны ынталандырады, содан кейін объект бассейніне енеді. Бұл жақсы жұмыс істейтін сияқты, бірақ объектілер пулының көрсеткішіне қажет жад тіпті басқа сыныптар өздерін таныстыра бастағанға дейін сақталмаса және бұл кіруді бұзуы мүмкін болса, мені мазалайды.

8
задан Ali1S232 28 June 2011 в 09:50
поделиться