閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

void draw_circle(const cv::Mat& mat)
{
    cv::Mat copy = mat;
    cv::circle(copy, { 50, 50 }, 50, 255, -1);

    // なんならこれも通る
    // cv::circle(mat, { 50, 50 }, 50, 255, -1);
}

cv::Mat1b mat = cv::Mat1b::zeros(100, 100);
draw_circle(mat);
// ここで、matの内容が書き換えられている

という感じでconst参照で渡しても中身書き換えられちゃうのなんかイヤだなーと。渡すときにcloneすればいいんですが書き換えない場合は無駄になるので避けたいじゃないですか。constなんだから変わらないだろうと思ったら、関数の中でうっかり書き換えちゃってたりすると悲しいことになったり…。

コピーコンストラクタでコピー元が非constの時だけshallow copyする、というわけにもいかないんですかね。何かハマり所はありそう。