【问题标题】:Using make_shared with char[] or int[] [closed]将 make_shared 与 char[] 或 int[] 一起使用 [关闭]
【发布时间】:2017-08-17 22:49:28
【问题描述】:

你能告诉我这是否适用于 VS2015 吗?

shared_ptr< char> buffer( make_shared< array< char,10>>() , [] (char *p){delete[] p; } );

shared_ptr< char> buffer( make_shared< array< int,10>>() ,default_delete< int[]>());

【问题讨论】:

  • 试试看?如果手头没有副本,可以使用在线编译器...

标签: c++ arrays pointers shared


【解决方案1】:

Visual Studio 2015 不支持 C++17 标准。在 C++17 标准之前,您不能拥有 std::shared_ptr&lt;T[]&gt; 指针。但即使在 C++17 中,std::make_shared 函数也不支持数组类型,因此您必须改用 boost::make_shared。另一种选择是将唯一指针与支持数组类型的std::make_unique 结合使用。正如 Scot Meyers 在他的“Effective 《现代 C++》一书:

std::unique_ptr 对数组的存在应该只有 你的智力兴趣,因为 std::array、std::vector 和 std::string 实际上总是比更好的数据结构选择 原始数组。

【讨论】:

  • 你可能想看看@Baum mit Augen 向我建议的this answer
  • 那个答案使用明确的新的,我的问题是摆脱它。 std::shared_ptr p(new int[10], std::default_delete()); // 在 VS2015 中工作正常。是否可以使用 make_shared 摆脱显式的 new ?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多