gpt4 book ai didi

c++ - 用 `new`调用默认参数会导致内存泄漏吗?

转载 作者:行者123 更新时间:2023-12-02 09:58:02 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数返回最大检测到的对象的中心点。没问题问题是,如果用户要使用它,我也想从参数返回前景蒙版。
为了处理这种情况,我的解决方案如下:

cv::Point detect(const cv::Mat &img, cv::Mat &mask = *new cv::Mat());
如果指定了 mask参数,则可以在 main中使用它。 RAII是否可以在其他情况下工作,还是会发生内存泄漏?
注意:我知道我可以将函数重载2行,但是我想知道是否可以通过使用默认参数而不使用指针(输入类型很严格)来正确执行此功能。
另一个说明:如果可以使用 cv::noArray()或类似的函数,那完全可以。
用法示例:
char ch = 0;
while (ch != 27) // ESC is pressed
{
cap >> img;
if (img.empty())
break;
cv::Mat mask;
cv::Point pt = detect(img, mask);
// or pt = detect(img);
cv::imshow("original", img);
cv::imshow("foreground", mask);
ch = cv::waitKey(1);
}

最佳答案

是的,这会导致内存泄漏。您可以考虑使用元组返回值:

std::tuple<cv::Point, cv::Mat> detect(const cv::Mat &img);
或将 mask用作指针:
cv::Point detect(const cv::Mat &img, cv::Mat *mask = nullptr);
您也可以尝试使用 Actor 表保留相同的签名。这很丑陋,但可能会起作用:
cv::Point detect(const cv::Mat &img, cv::Mat &mask = const_cast<cv::Mat&>(static_cast<cv::Mat const&>(cv::Mat())));

关于c++ - 用 `new`调用默认参数会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64307876/

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