oluşturmaz çünkü adı verilecek:
B b = a->getB();
tip B
yeni bir nesne oluşturulur referanstan mevcut örneğe B
(B&
). Bu, kopya kurucusu adlı burada çağrılan B::operator=
değil.
Her sınıfın bir kopya kurucusu vardır (bunu açıkça eklemezseniz, derleyici sizin için bir tane sağlayacaktır). Aynı sınıfa atıfta bulunan tek bir argümanı kabul eder. bu yüzden bu derleyici sizin için bir tane üretti varsayalım Yukarıdaki kodda kopya kurucu koymak değil:
class B
{
public:
B(B& other)
{
// memberwise copy (shallow copy)
};
};
Yani
A::getB()
üyesi
A::b
bir başvuru döndü ve bu referans
B::B(B&)
bir argüman olarak kabul edildi.
void func()
{
A *a = new A(); // Instance of A is created on the heap;
// (pointer a is a local variable and is on the stack though!)
// A::b is object of type B and it is on the heap as well
B b = a->getB(); // Instance of class B is created on the stack (local variable)
.....
delete a; // deleting A from the heap:
// A::~A is called which calls B::~B (of its member b)
} // a and b go out of the scope; b is an object => B::~B is called
B nesnesinin işlevi yine de yereldir. –