C - C++
Global Alanda Tanımlanmış Sınıfı Oluşturan Constructor İle Main() Arasındaki İlişki
Global Alanda Tanımlanmış Sınıfı Oluşturan Constructor İle Main() Arasındaki İlişki
-
Merhaba herkese,
Öncelikle,
Entry Point -> Programa giriş noktası, eğer derleyicinin eklediği kodları saymaz isek normal şartlar altında bir program main() fonksiyonundan çalışmaya başlar. Bu meseleyi böyle biliyorum yanlışım varsa düzeltin.
Soruya gelirsek
class DenemeSinif { public: int x, y; DenemeSinif(); }; DenemeSinif::DenemeSinif() { cout << "DenemeSinif ctor" << endl; } DenemeSinif GlobalDeneme; int main(int argc, char **argv) { cout << "main " << endl; return 0; }
verilen kodda ilk önce output'a"main " yazılması lazım ancak "DenemeSınıf ctor" yazılacak. Bu meselenin böyle olduğunu biliyorum ancak benim merak ettiğim derleyici ctor çağrısını tam olarak nerede gerçekleştiriyor.
Yani main girişinin hemen peşine bütün yürütülebilir deyimlerden önce ctor çağrısının kodunumu yerleştiriyor yoksa gerçekten main e hiç girmeden mi çalışıyor. C++11 N3337 - Open Standards buraya baktım ama mesele ilgili birşey göremedim ya da gözden kaçırdım. (Yani mantıken main içerisinde GlobalDeneme yi kullanabilmek için ctor un çağrılması lazım)
Teşekkürler.
-
Cevaba dair bir fikrim yok, up olsun :)
-
Global alanda tanımlanmış tüm nesnelerin yapıcıları tüm fonksiyonlardan önce çağrılır(main dahil). Yıkıcıları ise main sona erdiğinde çağrılır.
-
telefondan yazıyorum. Derleyici direktifleri işlendikten sonra mainden önceki global değişkenler oluşturulur. Daha sonra entry point olan main çalıştırılır. Sen aslında global bir değişken olan sınıfın nesnesini türetiyorsun. Kod çalıştırmıyorsun. Nesne ise constructure kısmını çalıştırıyor hepsi bu. Standartlardaki yerini bilemeyeceğim.