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
广告