如果我使用auto_ptr来保存指向动态分配的数组的指针,当auto_ptr被杀死时,它将使用普通删除操作而不是删除[]因此不会删除我分配的数组.
我如何(正确)在动态分配的数组上使用auto_ptr?
如果这不可能,动态分配的数组是否有另一种智能指针替代方案?
提前致谢.
jam*_*lin 10
你没有.std::auto_ptr并不意味着与数组一起使用.
避免使用new[]和delete[].请std::vector改用. 这也是Stroustrup的推荐.
如果您正在使用数组,因为您需要将它传递给需要指针的代码,您可以简单地传递(非空)向量的第一个元素的地址.例如:
std::vector<char> buf(size);
fgets(&buf[0], buf.size(), stdin);
Run Code Online (Sandbox Code Playgroud)
请注意,在C++ 11中,您可以(并且应该)使用buf.data()而不是&buf[0]; buf.data()也适用于空矢量.
boost :: shared_array就是你要找的东西.
编辑:
如果你想避免使用boost我会建议只使用std::vector它们是在下面的数组,并且不需要担心内存分配.实际上,这是一个比shared_array任何方式更好的解决方案.
由于您表明您想要使用,auto_ptr因此您不需要引用计数和所有权模型shared_array.因此,只需使用std :: vector,因为它们是为了替换动态分配的数组而定制的,而这正是您尝试使用的管理方式auto_ptr.
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |