我有一个处理图像的旧代码库。 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;
}
getImage()
函数将图像移交给旧的部分?还是应该使用类似std::unique_ptr<double> image
的东西?
std::unique_ptr<double> image
,我是否需要一个自定义删除器,因为unique_ptr管理一个数组,而不是一个指向double的指针?double* image
和动态分配吗?答案 0 :(得分:3)
是否建议使用这样的getImage()函数将图像移交给旧的部分?
如果已使用此功能,请确定。一种更现代的选择可能是返回一个span
,它封装了指向数组开头和数组长度的指针。
或者我不应该完全使用现代C ++并坚持旧样式吗?拥有双*图像和动态分配?
较新的设计仍使用动态分配。它只是隐藏在std::vector
内部。
请注意,std::vector
从一开始就已成为C ++标准,并且在没有容器的情况下管理动态数组是非常古老的风格,它早于标准C ++(现在已有20多年的历史了)和之前的STL。我不知道保留旧样式的好理由。
P.S。使用std::unique_ptr
的附加间接寻址可能没有优势。直接将向量作为成员存储可能是最佳选择。