调用指针参数从const函数指向的对象的操作员

call operator of the object that a pointer argument is pointing to from a const function

本文关键字:对象 操作员 函数 指针 参数 const 调用      更新时间:2023-10-16

定义操作员

    RGBAPixel * operator()(size_t x, size_t y);
    RGBAPixel const * operator()(size_t x, size_t y) const;

我应该如何在const函数中调用它?(底部的PNG)

PNG Quadtree::decompress() const
{
    PNG * png = new PNG((size_t) res, (size_t) res);
    decompressHelper(png,0,0,res/2,root);
    return * png;
}
void Quadtree::decompressHelper(PNG * png, int x, int y, int setresolution, QuadtreeNode * subRoot) const
{
    if (subRoot->nwChild == NULL) {
        png((size_t) x, (size_t) y) = subRoot->element;

只是将操作员过载定义为const:

RGBAPixel * operator()(size_t x, size_t y) const;
                                           ^~~~~

既然您是通过指针传递的,则应在打电话之前将其取消(不要忘记退出):

*(*png)((size_t) x, (size_t) y) = subRoot->element;
 ^^   ^

它不是一个函数指针,而是一个可以用作函数的类对象的指针。但是,这是一个微妙的区别。

我还建议更改此功能以防止潜在的内存泄漏:

PNG Quadtree::decompress() const
{
    PNG png((size_t) res, (size_t) res);
    decompressHelper(&png, 0, 0, res/2, root);
    return png;
}

您不是delete -ing您已分配给new的内容。