我試圖在C++中創建一個類型不可知的向量,該向量由兩個事物來區分。首先,它在對象本身中分配內存,至少直到某個點,而不是在堆上維護實際的對象數組。其次,它不能使用C++的複製/分配構造函數,這似乎會減慢代碼的速度並且不是必需的。關於移動/複製C++對象實例
查看我在計算機上維護的代碼庫時,發現LLVM代碼庫中的類非常完美地描述了我正在尋找的內容:SmallVector.h。對於C++來說相對陌生,我不完全確定爲什麼會做出一些設計決策。例如,爲什麼數組按照U
而不是T
分配?評論給出了一條線索:
如果T有ctor或dtor,我們不希望它自動運行,所以我們需要將空間表示爲別的東西。一個字符數組可能很好,但可能沒有足夠的對齊。相反,我們使用空間的一些聯合實例來保證最大的對齊。
U
,當然,是指下列工會:
union U {
double D;
long double LD;
long long L;
void *P;
} FirstEl;
所以,我想,這裏是我真正的問題:爲什麼分配的T
數組意味着構造函數/析構函數叫什麼名字?有沒有什麼辦法可以移動C++對象實例,即在向量內外移動,而不調用這些構造函數/析構函數?我想我可以使用LLVM的SmallVector
實現,但我討厭使用代碼而不理解它。
最佳, 杜安
'C++的複製/分配構造函數,它似乎會減慢代碼...'它使_correct_代碼,因爲它們是必需的。有幾個類會在它們被memcopied時崩潰,並且_not_沒有默認的構造函數。 –