gpt4 book ai didi

c++ - 将 unique_ptr 与 C 风格数组结合使用

转载 作者:行者123 更新时间:2023-11-27 23:38:02 35 4
gpt4 key购买 nike

问题

我有一个处理图像的旧代码库。 C++ 风格很旧(在 C++11 之前),没有智能指针或类似的东西。只有大量的动态分配和原始指针。

始终只处理一张实际图像。这些图像作为 C 样式数组保存和传递:

class A {
A(double* image);
}

class B {
B(){ image = new double[10]; };
double* image;
}

class C {
C();
foo(double* image);
}

我需要添加一个管理和读取图像的新类。我想建立一个这样的类,因为我对所有这些动态分配感到非常不舒服,并且想使用更现代的 C++。

class NewImage {
NewImage();
double* getImage() { return &image.get()->at(0); };
readImage();
...
private:
std::unique_ptr<vector<double>> image;
}
  1. 有这样的推荐吗getImage()将图像移交给旧部分的功能?或者我应该使用类似 std::unique_ptr<double> image 的东西吗? ?
    • 如果我会使用 std::unique_ptr<double> image ,我是否需要一个自定义删除器,因为 unique_ptr 管理一个数组,而不是指向 double 的指针?
  2. 或者我根本不应该使用现代 C++ 而坚持旧的风格吗?与 double* image和动态分配?

最佳答案

Is it recommended to have such a getImage() function for handing over the image to the old part?

如果您使用过这样的功能,那当然可以。一个更现代的替代方法可能是返回一个 span,它封装了指向开头的指针以及数组的长度。

Or shouldn't I use modern C++ at all and stick to the old style? With double* image and dynamic allocation?

动态分配仍然用于较新的设计。它只是隐藏在 std::vector 中。

请注意,std::vector 从一开始就属于 C++ 标准,并且在没有容器的情况下管理动态数组是非常古老的风格,早于标准 C++(现在已有二十多年历史)和之前的STL。我不知道保持旧风格的好理由。


附言使用 std::unique_ptr 的附加间接可能没有任何优势。将 vector 直接存储为成员可能更优化。

关于c++ - 将 unique_ptr<std::vector> 与 C 风格数组结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57772660/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com