2015-05-11 11 views

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 .

+1

Cevabınız bunu çözdü, silindi, +1. – vsoftco

+0

'uninitialized_copy'," memcpy "ile tam olarak eşdeğer mi? –

+1

@MattMcNabb Bu sadece önemsiz bir şekilde kopyalanabilirlerse doğru olabilir, AFAIK. – Pradhan