我需要一个像 std::auto_ptr 这样的类,用于使用 new[] 分配的 unsigned char* 数组。但是auto_ptr 只调用delete 而不是delete[],所以我不能使用它。
我还需要一个创建并返回数组的函数。我在一个类 ArrayDeleter 中提出了我自己的实现,我在这个例子中使用了它:
#include <Utils/ArrayDeleter.hxx>
typedef Utils::ArrayDeleter<unsigned char> Bytes;
void f()
{
// Create array with new
unsigned char* xBytes = new unsigned char[10];
// pass array to constructor of ArrayDeleter and
// wrap it into auto_ptr
return std::auto_ptr<Bytes>(new Bytes(xBytes));
}
...
// usage of return value
{
auto_ptr<Bytes> xBytes(f());
}// unsigned char* is destroyed with delete[] in destructor of ArrayDeleter
有没有更优雅的方法来解决这个问题? (即使使用另一个“流行”库)
最佳答案
Boost 有多种自动指针,包括用于数组的指针。您是否考虑过 std::vector 是否足够? vector 保证在内存中是连续的,如果您知道大小并通过 reserve()
或 resize()
提前分配内存,则内存中的位置不会改变。
关于c++ - 无符号字符数组的自动指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2713509/