1樓:夏寒
可以用placement_new,也可以用std::initializer_list
placement_new其他人說過了
std::initializer_list大概寫一下#include
class A
private:
int a;
};class B
;int main(int argc, char *argv),, };
system("pause");
return 0;}
2樓:lichray
首先要區分 new 和 operator new(size_t), 前者始終 initialize, 即使是像 new char[12] 這樣也是 default initialized, 給予每乙個元素 indeterminate value (物理上相當於沒有 initialize)。後者是單純地獲取 memory resource. 後者提供標準意義上的 uninitialized storage; allocator 包裝的是後者。
然後關於在 uninitialized storage 上構造和析構,這在標準庫里是有專門的 pattern 的,參考 Standard library header <memory> 裡關於 Uninitialized storage.
size_t
len=7;
std::
allocator
string >a;autop= a.allocate (len );std ::uninitialized_fill_n(p ,len ,"meow" );std ::destroy_n(p ,len);a .deallocate(p ,len );標準庫內部使用的過程是支援 uses-allocator construction 的,這是和已經開放出來的介面唯一的區別。不過大概你也用不著 allocator, 我上面也只是把 std::allocator 當作 operator new 和 operator delete 的 shortcut 而已。 至於 alignment, C++17 要求 new 通過新的 operator new(size_t, align_val_t) 系列簽名支援 over-aligned types, 但沒有要求 std::allocator 支援(但 libstdc++ 實現了這個),但又要求 std::pmr:: polymorphic_allocator 支援(但 libc++ 的 std::experimental::pmr:: polymorphic_allocator 又是瞎實現的「我為什麼要說「又」?」),總之亂得可以。 aligned_alloc 保平安吧。 3樓:「已登出」 std::tuple 例如有structaa (char ){}a (double ){}}; template T>struct tuple_init :public Ttemplate size_t ...at ,typename ...AT >tuple_init (index_sequence >,tuple >k):T(get )...){} };autoi= make_tuple (make_tuple (int(1 )),make_tuple (char ('c' )),make_tuple (double (1.0 ))); tuple 加不加小括號的根本是預設建構函式與復合預設建構函式的區別。加括號存在兩種情況 1.若括號為空,即無實參項,那麼理解為呼叫預設建構函式 2.若括號非空,即有實參項,可以理解為呼叫過載建構函式,或復合預設建構函式。2 不加括號 呼叫預設建構函式,或復合預設建構函式。預設建構函式 編譯器會為每乙個類預設提... Klein Hu 首先用VS Code開啟整個資料夾,然後有幾種方式可以解決你說的問題 單獨編輯每個檔案。編譯的時候直接編譯多個檔案。做乙個Makefile,用make命令來編譯多個檔案。類似2,但使用automake生成Makefile,然後再用make來編譯 類似3,但使用cmake 類似3,但... include template T class Node template T class List 預設建構函式 template T List List 拷貝建構函式 template T List List const List ln tail next nullptr 向鍊表新增資料 te...建立新的引用類時,為什麼要在new後面的類名後面加小括號?
如何用vs code寫c語言專案 多個檔案,原始檔和標頭檔案 ?
如何用c 實現鍊表類的操作?