bu kodu dikkate alınız C++ içinde anlambilim kopya Başlarken: yapıcı ve yıkıcı iki defa çağrılıretrafında
class A
{
};
int main()
{
std::vector<A> test;
test.push_back(A());
}
, ayrıca hafıza iki kez tahsis edilecek ve nesne kopyalanan olacak, artık sadece söz konusu potansiyel olarak kötü performans ayrıca çalışma zamanı hatalarına da yol açabilir, özellikle de yıkıcıda bir miktar temizleme varsa. Ben genellikle bu çevrede alırdım yolu sadece yerine işaretçiler vektör oluşturmaktır:
std::vector<A*> test;
test.push_back(new A());
Sorum, bu genel bir uygulamadır kat ikidir ve iyi uygulamadır? Yoksa daha iyi bir yolu var mı? Bu bir dupe olduğu ortaya çıkarsa lütfen bana bildirin ve soruyu kapatacağım, ancak arama konusunda hiçbir şey bulamadım.
* İşaretçi kullanma * yaygın bir uygulamadır. Ve * değil * işaretçileri kullanarak iyi bir uygulamadır. İşaretçiler kullanmadıysanız ve bir * hareket * yapıcısını uyguladıysanız daha iyi bir uygulama olacaktır. –
hala, "std :: vector test", listede polimorfizm gerektiğinde gereklidir (ve B, temel sınıftır). Ama sadece burada ... ve bellek sızıntıları/çift özgürlüğün kötü olduğunu kabul ediyorum. –
Daha iyi bir yol, B için bir hareket yapıcıyı uygulamaktır. –