你能分配一个与 make_shared 等效的数组吗?

新手上路,请多包涵
buffer = new char[64];
buffer = std::make_shared<char>(char[64]); ???

您可以使用 make_shared<>() 为数组分配内存吗?

我可以这样做: buffer = std::make_shared<char>( new char[64] );

但这仍然涉及调用 new,据我了解 make_shared 更安全、更高效。

原文由 Josh Elias 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

make_shared 的要点是将托管对象合并到共享指针的控制块中,

由于您正在处理 C++11,也许使用 C++11 数组可以满足您的目标?

 #include <memory>
#include <array>
int main()
{
    auto buffer = std::make_shared<std::array<char, 64>>();
}

请注意,您不能以与从 new[] 获得的指针相同的方式使用共享指针,因为 std::shared_ptr (例如,与 std::unique_ptr 不同)不提供 operator[] 。你必须取消引用它: (*buffer)[n] = 'a';

原文由 Cubbi 发布,翻译遵循 CC BY-SA 3.0 许可协议

您需要共享分配的内存吗?您可以使用 std::unique_ptrstd::make_unique 在 C++14 上可用:

 auto buffer = std::make_unique<char[]>(64);

在 C++20 中将有一个 std::make_shared 版本:

 auto buffer = std::make_shared<char[]>(64);

原文由 Myon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题