Jos*_*ias 24 c++ shared-ptr make-shared c++11
buffer = new char[64];
buffer = std::make_shared<char>(char[64]); ???
Run Code Online (Sandbox Code Playgroud)
你可以使用make_shared<>()?为数组分配内存吗?
我可以: buffer = std::make_shared<char>( new char[64] );
但这仍然涉及呼唤新的,这是我的理解make_shared更安全,更有效.
Cub*_*bbi 23
make_shared的要点是将托管对象合并到共享指针的控制块中,
既然你正在处理C++ 11,那么使用C++ 11数组可能会满足你的目标吗?
#include <memory>
#include <array>
int main()
{
auto buffer = std::make_shared<std::array<char, 64>>();
}
Run Code Online (Sandbox Code Playgroud)
请注意,您不能以与从new []获得的指针相同的方式使用共享指针,因为std::shared_ptr(std::unique_ptr例如,不像)不提供operator[].你必须取消引用它:(*buffer)[n] = 'a';
Myo*_*yon 11
您是否需要分配已分配的内存?您可以使用C++ 14上的std::unique_ptr替代和std::make_unique可用:
auto buffer = std::make_unique<char[]>(64);
Run Code Online (Sandbox Code Playgroud)
std::make_sharedC++ 20 中将提供一个版本:
auto buffer = std::make_shared<char[]>(64);
Run Code Online (Sandbox Code Playgroud)
这个怎么样?
template<typename T>
inline std::shared_ptr<T> MakeArray(int size)
{
return std::shared_ptr<T>( new T[size], []( T *p ){ delete [] p; } );
}
auto buffer = new char[64];
auto buffer = MakeArray<char>(64);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13919 次 |
| 最近记录: |