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
int
,double
,char
,bool
,enum
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
vey
adında iki value type değişkeni tanımlanmış ve değerleri kopyalanmıştır:
#include
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
class
,array
,vector
,string
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
veq
adında iki reference type değişkeni tanımlanmış ve değerleri atılmıştır:
#include
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
}
Kategoriler:
Etiketler:C++ reference typeC++ value typeheapstack