std::uninitialized_copy
ve std::copy
arasındaki fark nedir ve ne zaman kullanmalıyım?std :: uninitialized_copy & std :: copy arasındaki fark nedir?
20
A
cevap
26
malloc
aracılığıyla öbekte bir bellek ayırdığınız ve ona bir işaretçi T* p
sahip olduğunuzu söyler. Başlatılmamış depolama alanıyla sonuçlanırsınız, çünkü tüm malloc
tüm tahsis edilen boyutun (new
gerçekte nesneleri yapılandırır ve böylelikle ayrılan bölge başlatılmış depolamayı yapar) boyutunu işaretler. p
başlayarak bellek konumu tip T
orada oturan geçerli bir nesne olmadığından üzerinde atama operatörü çağırmak için p
de tip T
hiçbir nesne olmadığından, bu
T a;
*p = a;
yapamaz. Bunun yerine, placement new
kullanarak konumda p
de bir konstrukt tip T
bir nesne olacaktır: Eğer başlatılmamış depolama üzerine kopyalamak istediğiniz bir dizi ile uğraşırken
T a;
new (p) T{a};
std::uninitialized_copy
sadece yukarıdaki kod parçacığı aralığı versiyonunu uygulayan .
Cevabınız bunu çözdü, silindi, +1. – vsoftco
'uninitialized_copy'," memcpy "ile tam olarak eşdeğer mi? –
@MattMcNabb Bu sadece önemsiz bir şekilde kopyalanabilirlerse doğru olabilir, AFAIK. – Pradhan