denilen Çok fazla yıkıcılar (ayrıca http://pastebin.com/yw5z2hnG de) kodudur aradı.C++ kadar az nesneler
cevap
Kendi kopya kurucu tanımlamak Eğer diğer nesneleri inşa edilmektedir göreceksiniz:
class X
{
public:
int i;
X(const X&);
X();
~X();
};
X::X(const X& x) : i(x.i)
{
cout << "---copy constructor\n";
}
// ... rest as before
derleyici kendi birini beyan yoksa hiçbir günlüğü gerçekleştiren bir kopya kurucu sağlayacaktır.
+1: Kapalı kopya nedenleridir. – Puppy
Bir daha ayrıntı - Eğer önceden vektörü için yer ayrılması halinde: Ayrıca vektör kopya tüm gördüğünüz gibi
---constructor
+++ copy constructor
***desctructor
---constructor
+++ copy constructor
***desctructor
...
:
int main()
{
vector<X> *vx = new vector<X>;
vx->reserve(5);
....
Sonra şu çıktıyı alırsınız onun depolama alanı yeniden tahsis etmek için gerekli olduğunda onun elemanları - bu nedenle son kopyalamak için 5 kopya kurucular ve yıkıcılar olsun push_back()
Cevabınız çok yardımcı oldu. Mümkün olan yerlerde, sadece vektörleri değil, yer ayırırım. Programım çok daha hızlı çalışıyor. Teşekkürler! – Xolve
Birden çok kez yineleniyor ... ama onları bulamıyorum Bu soruyu soran insanların genellikle örtük olarak tanımlanmış kopya kurucularından haberi olmamasına neden olur: p Her zaman cehaletin birisinin öğrenmesini engelleyebildiğini, çünkü birisinin etkili bir şekilde sorgulanmasını engelleyeceğini çok komik buluyorum. –