在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函数自动调用但是如果有人可以告诉我是什么确切地说,当它完全被调用时,在源中的位置,我将是最感性的=)。
答案 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();
}