C++ Reference ve Value Type

C++ reference ve value type, C++ dilinde iki farklı değişken türüdür. Bu tipler, değişkenlerin değerlerini nasıl sakladıkları ve aktardıkları konusunda farklılık gösterirler. Aşağıda bu tiplerin tanımlarını, örneklerini ve bellekteki yerlerini açıklayacağım:

  • Value type (Değer tipi): Value type, bir değişkenin değerini doğrudan içeren ve bellekte ayrı bir alan kaplayan bir türdür. Value type, basit veri türleri olarak da bilinir ve C++ dilinde intdoublecharboolenum gibi tipler value type’a örnektir. Value type, bir değişkenin değeri kopyalandığında bağımsız olarak saklanır. Yani, bir değişkenin değeri değiştirildiğinde, diğer değişkenler etkilenmez. Value type, bellekte stack bölümünde tutulur. Stack bölümü, programın işlev çağrılarını takip eden ve yerel değişkenleri, parametreleri ve geri dönüş adreslerini içeren bir bölümdür. Stack bölümü, derleyici tarafından yönetilir ve sınırlı bir boyuta sahiptir. Örneğin, aşağıdaki kodda, x ve y adında iki value type değişkeni tanımlanmış ve değerleri kopyalanmıştır:
				
					#include <iostream>

int main() {
    int x = 10; // value type değişkeni tanımlama
    int y = x; // value type değişkeninin değerini kopyalama
    std::cout << "x: " << x << "\n"; // x: 10
    std::cout << "y: " << y << "\n"; // y: 10
    x = 20; // value type değişkeninin değerini değiştirme
    std::cout << "x: " << x << "\n"; // x: 20
    std::cout << "y: " << y << "\n"; // y: 10
}

				
			
  • Reference type (Referans tipi): Reference type, bir değişkenin değerinin bellekteki bir konuma (referansa) işaret ettiği bir türdür. Reference type, karmaşık veri yapıları (nesneler) olarak da bilinir ve C++ dilinde classarrayvectorstring gibi tipler reference type’a örnektir. Reference type, bir değişken diğer bir değişkene atandığında, aslında bellekteki aynı veriye işaret ederler. Bu nedenle, bir değişkenin değeri değiştirildiğinde, diğer değişkenler de aynı veriye işaret ettiği için etkilenir. Reference type, bellekte heap bölümünde tutulur. Heap bölümü, programın dinamik olarak bellek ayırdığı ve serbest bıraktığı bir bölümdür. Heap bölümü, yazılımcı tarafından yönetilir ve programın ihtiyacına göre büyüyüp küçülebilir. Örneğin, aşağıdaki kodda, p ve q adında iki reference type değişkeni tanımlanmış ve değerleri atılmıştır:
				
					#include <iostream>

class Point { // reference type sınıfı tanımlama
    public:
        int x;
        int y;
};

int main() {
    Point* p = new Point(); // reference type değişkeni tanımlama
    p->x = 10; // reference type değişkeninin değerini atama
    p->y = 20; // reference type değişkeninin değerini atama
    Point* q = p; // reference type değişkeninin değerini atama
    std::cout << "p->x: " << p->x << "\n"; // p->x: 10
    std::cout << "p->y: " << p->y << "\n"; // p->y: 20
    std::cout << "q->x: " << q->x << "\n"; // q->x: 10
    std::cout << "q->y: " << q->y << "\n"; // q->y: 20
    p->x = 30; // reference type değişkeninin değerini değiştirme
    std::cout << "p->x: " << p->x << "\n"; // p->x: 30
    std::cout << "p->y: " << p->y << "\n"; // p->y: 20
    std::cout << "q->x: " << q->x << "\n"; // q->x: 30
    std::cout << "q->y: " << q->y << "\n"; // q->y: 20
    delete p; // reference type değişkeninin belleği serbest bırakma
    delete q; // reference type değişkeninin belleği serbest bırakma
}