C 如何用new建立類的多個物件,並且同時使用該類的帶參建構函式?

時間 2021-06-01 04:00:03

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

(k

)...){}

};autoi=

make_tuple

(make_tuple

(int(1

)),make_tuple

(char

('c'

)),make_tuple

(double

(1.0

)));

tuple

,tuple_init

,tuple_init

>tem(i);

建立新的引用類時,為什麼要在new後面的類名後面加小括號?

加不加小括號的根本是預設建構函式與復合預設建構函式的區別。加括號存在兩種情況 1.若括號為空,即無實參項,那麼理解為呼叫預設建構函式 2.若括號非空,即有實參項,可以理解為呼叫過載建構函式,或復合預設建構函式。2 不加括號 呼叫預設建構函式,或復合預設建構函式。預設建構函式 編譯器會為每乙個類預設提...

如何用vs code寫c語言專案 多個檔案,原始檔和標頭檔案 ?

Klein Hu 首先用VS Code開啟整個資料夾,然後有幾種方式可以解決你說的問題 單獨編輯每個檔案。編譯的時候直接編譯多個檔案。做乙個Makefile,用make命令來編譯多個檔案。類似2,但使用automake生成Makefile,然後再用make來編譯 類似3,但使用cmake 類似3,但...

如何用c 實現鍊表類的操作?

include template T class Node template T class List 預設建構函式 template T List List 拷貝建構函式 template T List List const List ln tail next nullptr 向鍊表新增資料 te...