Я иду через некоторый код, планируют адаптировать его для моего заголовка файла research.So выглядит следующим образомПочему виртуальный деструктор?
#ifndef SPECTRALCLUSTERING_H_
#define SPECTRALCLUSTERING_H_
#include <vector>
#include <eigen3/Eigen/Core>
class SpectralClustering {
public:
SpectralClustering(Eigen::MatrixXd& data, int numDims);
virtual ~SpectralClustering();
std::vector<std::vector<int> > clusterRotate();
std::vector<std::vector<int> > clusterKmeans(int numClusters);
int getNumClusters();
protected:
int mNumDims;
Eigen::MatrixXd mEigenVectors;
int mNumClusters;
};
#endif /* SPECTRALCLUSTERING_H_ */
последних в основном коде
#include "SpectralClustering.h"
#include <eigen3/Eigen/QR>
SpectralClustering::SpectralClustering(Eigen::MatrixXd& data, int numDims):
mNumDims(numDims),
mNumClusters(0)
Так что я не понимаю, почему виртуальный деструктор был использован в файле .h. От this мы можем узнать, что виртуальные деструкторы полезны, когда вы можете удалить экземпляр производного класса с помощью указателя на базовый класс. Но я думаю, что это не случай с этим кодом. Может кто-нибудь объяснить все это?
Если они не определились с виртуальным деструктором, это связано с тем, что они предполагают, что кто-то создает производный класс, используя «SpectralClustering» в качестве базового класса. – CoryKramer