C++ 記憶體::make_shared



當第一次生成記憶體資源時,make_shared 會被使用,因為它可以更快地生成一個shared_ptr。make_shared 是異常安全的。透過使用相同的函式為控制塊和資源分配記憶體,可以降低構造開銷。如果不使用 make_shared,則必須在將物件傳遞給 shared_ptr 函式之前,使用 new 表示式顯式構造該物件。

語法

以下是 C++ Memory::make_shared 的語法:

shared_ptr<T> make_shared (Args&&... args);

引數

args − 它是零個或多個型別的列表。

示例 1

讓我們來看下面的例子,我們在這裡使用 make_shared 並檢索值。

#include <iostream>
#include <memory>
void result(const std::shared_ptr<int>& i){
   (*i)++;
}
int main(){
   auto  value = std::make_shared<int>(8);
   result(value);
   std::cout << *value << std::endl;
}

輸出

讓我們編譯並執行上面的程式,這將產生以下結果:

9

示例 2

以下是另一種情況,我們將使用 make_shared 並檢索值。

#include <iostream>
#include <memory>
int main (){
   std::shared_ptr<int> Result1 = std::make_shared<int> (14);
   auto Result2 = std::make_shared<int> (3);
   std::cout << "*Result1: " << *Result1 << '\n';
   std::cout << "*Result2: " << *Result2 << '\n';
   return 0;
}

輸出

執行以上程式碼後,它將顯示如下輸出:

*Result1: 14
*Result2: 3

示例 3

考慮以下示例,我們將從 TP 中建立 std::shared_ptr<std::function<void(int)>>。然後將 TP 作為引數傳遞給 make_shared。

#include <iostream>
#include <memory>
#include <functional>
struct TP {
   void operator()(int i){
      std::cout << i;
   }
};
int main(){
   auto fun = std::make_shared<std::function<void(int)>>(TP{});
   (*fun)(142);
   return 0;
}

輸出

當代碼執行時,它將生成如下所示的輸出:

142
廣告