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 许可协议
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 许可协议
您需要共享分配的内存吗?您可以使用 std::unique_ptr
和 std::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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
make_shared 的要点是将托管对象合并到共享指针的控制块中,
由于您正在处理 C++11,也许使用 C++11 数组可以满足您的目标?
请注意,您不能以与从 new[] 获得的指针相同的方式使用共享指针,因为
std::shared_ptr
(例如,与std::unique_ptr
不同)不提供operator[]
。你必须取消引用它:(*buffer)[n] = 'a';