Rumah >pembangunan bahagian belakang >C++ >C Instantiation Objek: Tindanan lwn. Timbunan: `baru` atau Bukan `baru`?

C Instantiation Objek: Tindanan lwn. Timbunan: `baru` atau Bukan `baru`?

Linda Hamilton
Linda Hamiltonasal
2024-12-02 01:19:13292semak imbas

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

Membuat Objek: Dengan atau Tanpa Baharu

Apabila mencipta objek dalam C , pengaturcara boleh menggunakan sama ada pengendali "baru" atau membuat instantiatnya secara langsung tanpanya. Walaupun kedua-dua pendekatan mencipta objek, ia berbeza dalam beberapa aspek utama.

Tanpa Baharu

Menginstantiasikan objek tanpa "baharu" secara langsung menyimpan memori untuknya dalam skop semasa. Ini biasanya dilakukan pada timbunan dan menghasilkan objek dengan jangka hayat automatik. Objek dicipta dan dimusnahkan secara automatik dalam skop yang ditakrifkan.

Contohnya:

Time t(12, 0, 0); // t is a Time object

Dalam kod di atas, objek "Masa" "t" dicipta pada tindanan dan hayatnya terikat pada skop semasa.

Dengan Baharu

Menggunakan "baru" untuk membuat seketika objek memperuntukkan memori untuknya secara dinamik pada timbunan. Ini membolehkan objek dicipta dan dimusnahkan secara eksplisit apabila jangka hayatnya tamat. Penunjuk "t" menyimpan alamat timbunan objek.

Contohnya:

Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object

Di sini, penuding "t" diberikan alamat timbunan "Masa" yang baru dibuat objek. Hayat objek adalah bebas daripada skop dan berterusan sehingga operator "padam" digunakan untuk membebaskan memorinya.

Perbezaan Utama

  • Peruntukan Memori : Objek yang dicipta tanpa "baru" memperuntukkan memori pada timbunan, manakala "baru" memperuntukkan memori pada timbunan.
  • Seumur hidup: Objek yang diwujudkan tanpa "baharu" mempunyai jangka hayat automatik, manakala objek yang dicipta dengan "baharu" mempunyai hayat dinamik dan mesti dipadamkan secara manual.

Adalah penting untuk ambil perhatian bahawa perbezaan ini adalah khusus pelaksanaan, kerana standard C tidak mentakrifkan tindanan dengan jelas dan tingkah laku timbunan. Walau bagaimanapun, dalam kebanyakan pelaksanaan praktikal, memori tindanan digunakan untuk objek automatik dan memori timbunan digunakan untuk objek dinamik.

Atas ialah kandungan terperinci C Instantiation Objek: Tindanan lwn. Timbunan: `baru` atau Bukan `baru`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn