c++ - 对 float 组使用 unique_ptr

标签 c++ arrays

我写了一个文件 IO 库。一个函数 File::read 如下所示:

template <typename T>
void File::read(T * t, unsigned long count) const

它将count T 读入*t

现在,跳到客户端。我分配了一个我想读入的内存缓冲区。我写了这个并且效果很好:

float * buffer = new float [16];
file->read(buffer, 16);

但是,这不是异常安全的。所以我决定将缓冲区包装在 std::unique_ptr 中。我在这里的某个地方犯了一个错误。

std::unique_ptr<float[]> buffer (new float[16]);
file->read(*buffer , 16);

这会在文件->读取时产生以下错误:

no match for 'operator*' (operand type is 'std::unique_ptr')

我认为通过取消对 unique_ptr 的引用,我会得到一个指向 float[] 数组第一个元素的指针。我的错误在哪里,解决方法是什么?

最佳答案

你有几个问题:第一个是你制作了一个 float[]std::unique_ptr(即你有一个指向 数组的指针> float )。

另一个问题是智能指针就像普通指针一样。当您使用 * 运算符取消引用普通指针时,您不再拥有一个指针,而是一个值(指针指向的值)。


此外,我建议您使用 std::array (如果你知道编译时的大小)或 std::vector而不是智能指针。在现代 C++ 中,几乎根本不需要指针。

你可以这样使用它

std::array<float, 16> buffer;
file->read(buffer.data(), buffer.size());

如果您没有 std::array,您可以使用 std::vector 代替:

std::vector<float> buffer(16);  // Create a vector of 16 floats,
                                // default initialized (i.e. 0.0)

// &buffer[0] is a pointer to the first element in the vector
// all vectors are guaranteed to be contiguous like normal arrays
file->read(&buffer[0], buffer.size());

关于c++ - 对 float 组使用 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22706997/

相关文章:

c++ - 即使其参数看起来正确,子字符串也会给出看似随机的结果

c++ - 最底层的标准库函数是怎么写的?

c++ - 使用 Valgrind 抑制 Qt 内存泄漏的文件

c++ - 使用 C++ 开发 Thunderbird 扩展

javascript - 使用 Jquery 从 PHP 页面解码 JSON 数据

c++ - 我一直收到 -2 作为我的更新工资

java - 无法使用 Apache Commons Lang 将双数组转换为字符串

php - 将数组插入数组然后编码 - PHP

c++ - 验证传递给函数的字符串类型(例如文字、数组、指针)

javascript - postman : How to assert all array elements exist in other array?