簡體   English   中英

shared_ptr到一個數組

[英]shared_ptr to an array

如何動態分配shared_ptr指向的“n個元素”?

我能夠創建一個共享指針指向的靜態數組,但我希望用戶輸入一個數字,然后分配n個元素。

shared_ptr<int[10]> p = make_shared<int[10]>();

你應該像那樣創建shared_ptr

std::shared_ptr<int> sp( new int[10], std::default_delete<int[]>() );

您必須為shared_ptr提供其他刪除操作

你不能使用std::make_shared ,因為該函數只提供1個參數,對於在數組上創建指針,你也必須創建刪除器。

或者您也可以使用(例如在注釋中,使用數組或帶有向量的,具有自己的刪除器)

std::shared_ptr<std::array<int,6>> ptr(std::make_shared<std::array<int, 6>>(std::array<int, 6>()));

如何獲得特定元素? 像那樣

std::shared_ptr<int> sp(new int[10], std::default_delete<int[]>());
sp.get()[0] = 5;
std::cout << sp.get()[0] << std::endl;

該語言目前缺乏使用make_shared來實現這一目標的能力。 它在P0674提到 很確定它會進入語言,雖然它不會是C ++ 11。

你可以說措辭

auto p = std::make_shared<int[10]>()

要么

auto p = std::make_shared<int[]>(10)

在C ++ 20之前(或者當提案正式標准化時),你仍然堅持使用在21koizyd的答案中鏈接的new語法。

我認為這個問題更好的是unique_ptr模板。

int amount = 10;
std::unique_ptr<int[]> name(new int[amount]);

我發現下面的表格是錯誤的。

std::shared_ptr<std::array<int,6>> ptr(std::make_shared<std::array<int, 6>>(std::array<int, 6>()));

它調用兩次析構函數。

如果您的輸入不是本機類型(如int),則會導致崩潰。

人們可以嘗試一下。

std::shared_ptr<std::array<int,6>> ptr(std::make_shared<std::array<int, 6>>());

也許上述說法是正確的?

有沒有人知道為什么它會調用兩次析構函數?

有什么想法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM