buffer = new char[64];
buffer = std::make_shared<char>(char[64]); ???
可以分配到存储器阵列使用make_shared<>()
我可以这样做: buffer = std::make_shared<char>( new char[64] );
但是,仍然需要调用新的,这是我的理解make_shared
更安全,更高效。
buffer = new char[64];
buffer = std::make_shared<char>(char[64]); ???
可以分配到存储器阵列使用make_shared<>()
我可以这样做: buffer = std::make_shared<char>( new char[64] );
但是,仍然需要调用新的,这是我的理解make_shared
更安全,更高效。
make_shared的一点是要被管理的对象合并到共享指针的控制块,
既然你要处理的C ++ 11,多半是使用C ++ 11阵列会满足你的目标是什么?
#include <memory>
#include <array>
int main()
{
auto buffer = std::make_shared<std::array<char, 64>>();
}
请注意,您不能使用共享指针的方式为指针你会从新的[]得到一样的,因为std::shared_ptr
(不像std::unique_ptr
,例如)不提供operator[]
你必须解除引用它: (*buffer)[n] = 'a';
你需要分配的内存共享? 您可以使用std::unique_ptr
而不是和std::make_unique
对C ++ 14可供选择:
auto buffer = std::make_unique<char[]>(64);
将会有一个std::make_shared
在C ++ 20的可用版本:
auto buffer = std::make_shared<char[]>(64);
这个怎么样?
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);