Son zamanlarda ISO C++ standardı yeniden okuma ve çok ilginç bir not bulundu: std::vector
için, std::vector<T>
türüne T
tek kısıt kopya kurucu olması gerektiğini tip T
olduğunustd :: vektör eki nasıl uygulanır? C++
Not. Aslında, ekleme sırasında vektörün belleği doluysa,
size = 2 * oldSize
'un yeni bir belleğini ayırır (bu, uygulamaya bağlıdır) ve daha sonra eski öğeleri kopyalayıp o öğeyi ekler.
Ama Bekle ?? tip T
bir varsayılan kurucu olmayabilir çünkü
ptr = new T[2*size];
- Bu yapıldığında nasıl böyle bir şeye ihtiyacım türde yeni bellek ayırmak için?
- Öyleyse Atama, belleği ayırdıktan sonra eski değerleri yeni belleğe atamalıyız, değil mi?
- Bu 2 şeyi göz önünde bulundurmak için,
std::vector
bunu "YALNIZCA KOPYA YAPISI" ile nasıl yapıyor? Hangi uygulama ve dil deyimleri kullanılır?
* * * dizi-'new' ile bitti. Array-'new', sadece keşfettiğiniz gibi, dilin tam bir yanlışlığı ve tamamen işe yaramaz. Bunun yerine, bellek ayırma ve nesne oluşturma birbirinden tamamen ayrı yapılır. –
Açık varsayılan derleyici sağlanmamışsa derleyici bir tane oluşturacaktır. – littleadv
@littleadv sınıfının herhangi bir türden kullanıcı tanımlı bir kurucusu varsa, o zaman derleyici tarafından üretilen varsayılan kurucu yok –