如何使这个析构函数虚拟化

时间:2015-10-02 01:49:23

标签: c++ virtual abstract overloading

#include "RegionsSingleImage.hpp"

#include <iostream>
#include <vector>

using std::vector;
using std::cerr;
using std::cout;
using std::endl;

RegionsSingleImage::RegionsSingleImage(std::string fName){
#ifdef __CVLOADIMAGE_WORKING__
  im = cvLoadImage(fName.c_str(), CV_LOAD_IMAGE_COLOR);
#else
  im = readImage(fName.c_str(), CV_LOAD_IMAGE_COLOR);
#endif
  if(im == NULL)
  {
    cerr << "Could not read image from " << fName << endl;
    assert(false);
  }
  list = new std::vector<Region *>;
}

RegionsSingleImage::RegionsSingleImage(IplImage *I)
{
  assert(I != NULL);
  im = cvCreateImage(cvGetSize(I), I->depth, I->nChannels);
  cvCopy(I, im, 0);
  list = new std::vector<Region *>;
}

RegionsSingleImage::~RegionsSingleImage()
{
  if(list)
    for(unsigned int i=0; i< list->size(); i++)
      if(list->at(i))
    delete(list->at(i)); 
  delete(list);
  cvReleaseImage(&im);
}

我需要让我的析构函数虚拟,因为它处理抽象对象,但我不知道我可以在哪里放置'virtual'关键字或如何根据布局组织代码。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您将virtual关键字放在标头声明"RegionsSingleImage.hpp"中。

答案 1 :(得分:1)

您只需将其声明为virtual,例如

class RegionSingleImage {
  ..
  virtual ~RegionSingleImage();
}

请注意,这必须在您要存储指针的层次结构的第一个对象上完成,并且仅针对它,因为它将在任何子类中隐式虚拟(与每个virtual方法一样)