无法浅层复制对象
Failed to shallow copy an object
我有一个类
template<typename T> class RGBHistogramTrait
{
public:
RGBHistogramTrait(const QImage &image, RGBHistogram<T> hist) : _hist(hist), _base((QRgb *) (image.bits()));
private:
const QRgb *_base;
RGBHistogram<T> _hist;
};
和
template<typename T> struct RGBHistogram
{
RGBHistogram<T>(Histogram<T> &redHist, Histogram<T> &greenHist, Histogram<T> &blueHist)
: redHist(redHist), greenHist(greenHist), blueHist(blueHist) {}
Histogram<T> &redHist, &greenHist, &blueHist;
};
现在我有一个单一的物体RGB直方图。我想创建大约100个RGBHistogramTrait实例,RGBHistrogramTrait的每个实例都应该创建一个RGBHist图的副本,每个实例都将由一个线程使用。
我将把100个线程的结果汇总到原始的RGB直方图中。问题是,在RGBHistogramTrait的每个实例中,它都指向同一个东西(原始RGBHistrogram)。我想我已经通过_hist(hist)在RGBHistogramTrait的构造函数中浅层复制了RGBHistrogram。RGB图表有一个std::映射,并且没有定义副本构造函数。
template<typename T> void ImageReader<T>::calculate(RGBHistogram<T> &hist)
{
QImage image;
if (image.load(QString::fromUtf8(_file.c_str())))
{
std::vector<RGBHistogramTrait<T> > *fs = new std::vector<RGBHistogramTrait<T> >[_threads];
for (ThreadNum i = 0; i < _threads; i++)
{
fs->push_back(RGBHistogramTrait<T>(image, hist));
}
ThreadCoord::start(image.width() * image.height(), _threads, *fs);
// Now aggregate the results in fs back into the original hist
}
在创建RGB直方图时,您可能通过引用传递了相同的redHist、greenHist和blueHist。redHist、greenHist、blueHist都是引用成员。当然,所有100个RGB直方图似乎都是相同的,因为它们都引用了相同的3个直方图。
相关文章:
- 将包含不可复制对象的对插入到映射中
- 通用参考 l 值不复制对象
- 为什么具有 2 个参数参数的构造函数接受复制对象作为 1 个参数参数?
- 为什么从引用创建共享指针会复制对象?
- 当(且仅当)对象具有复制构造函数时,如何复制对象?
- 我的程序运行良好,可以复制对象,但是当我使用复制分配(=)时,它仍然可以正常运行.为什么不给错误
- 如何复制对象
- 如何构造不可移动不可复制对象的元组?
- 不可复制对象数组的 consexpr 初始化?
- 提升::可选与标准::不可复制对象的可选
- 如何在C++中通过引用复制对象
- 从指针复制对象
- 删除浅表的复制对象和源对象
- 使用realloc可以安全地重新分配琐碎的可复制对象的存储吗
- C 返回复制对象
- 如何将智能指针作为类属性来复制对象
- 为什么在复制对象时忽略顶级常量
- std::shared_ptr 在复制对象时导致问题
- 安全复制对象的替代方案
- 当类包含boost::container::flat_set时,复制对象时出错