在OpenCV中,VideoCapture析构函数是什么

时间:2014-03-08 08:15:47

标签: c++ opencv

在VideoCapture :: Release - C ++文档中的链接http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=videocapture%3A%3Aread#videocapture-release

它说这行

“这些方法由后续的VideoCapture :: open()和VideoCapture析构函数自动调用。”

我希望有人可以告诉我VideoCapture析构函数究竟是什么我用谷歌搜索但没有明确答案......我确定它会在某些指定时间通过常见的VideoCapture函数自动调用但是如果有人可以告诉我是什么确切地说,当它完全被调用时,在源中的位置,我将是最感性的=)。

2 个答案:

答案 0 :(得分:1)

析构函数是类的一种方法,当类的实例超出范围或者使用delete关键字释放内存时调用该类。析构函数有一个名称,从~开始。

在这种特殊情况下,如果方法~VideoCapture,则会在以下情况下调用:

// One case
{
VideoCapture vc;
} // <- here ~VideoCapture called as it goes out of scope

// Another one
VideoCapture *vc = new VideoCapture();
delete vc; //<- here ~VideoCapture called as it is being deleted

// One more
{
    std:unique_ptr<VideoCapture> vc = std::make_unique<VideoCapture>();
} // <- here ~VideoCapture called as its handler goes out of scope

答案 1 :(得分:1)

这很容易。一旦对象离开范围,析构函数就会被调用。

{ // the capture only lives inside those brackets

    VideoCapture cap;
    if ( cap.open() )
    {  
        //... do some work 
    }

} // here it will release itself

如果您尝试使用自己的课程,可能会更明显:

class MyClass 
{
public:
    MyClass()  { cerr << "created MyClass" << endl; }    // constructor
    ~MyClass() { cerr << "destroyed MyClass" << endl; }  // destructor
};


void foo()
{ // scope starts
    MyClass mc;
    int z=17;
    z *= 3;
    cerr << z << endl;
} // scope ends, mc will get destroyed.

int main()
{
    return foo();
}