如何在Visual Studio中解决make_shared的10个限制

NoS*_*tAl 4 c++ visual-studio-2010 shared-ptr visual-c++ c++11

在一些旧代码上使用C++ 10的新功能时,我最终遇到了我无法调用的问题make_shared,需要12个参数.我记得微软的STL谈论他们如何使用仿真,make_shared而且10是最大的.显然,为此重构代码是不可能的,所以基本上我的问题是 - make_shared在VS 2010中有没有办法获得超过10个参数.

Dre*_*rew 11

make_shared<foobar>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
Run Code Online (Sandbox Code Playgroud)

可以替换为

shared_ptr<foobar>(new foobar(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12));
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,std :: make_shared实际上是使用第二种方法创建对象的性能优化,因为它只执行一次内存分配而不是两次,但是一旦你获得了10个变量,你就没有多少选择了关于哪个使用.

  • `make_shared`对于编写异常安全的代码也很有用.如果你使用这种方式,给每个`shared_ptr`一个名字,不要把它们作为临时传递. (3认同)