Tôi đã có một tập hợp lớn các lớp thừa kế (tiêu chí) kế thừa từ một lớp cơ sở (tiêu chí). Dưới đây là criterion
của mãVirtual Destructors mặc định trong C++
class criterion
{
public:
virtual unsigned __int32 getPriorityClass() const = 0;
virtual BOOL include(fileData &file) const = 0;
virtual void reorderTree() = 0;
virtual unsigned int directoryCheck(const std::wstring& directory) const = 0;
virtual std::wstring debugTree() const = 0;
};
Một số ví dụ về các lớp học có nguồn gốc từ một này:
class fastFilter : public criterion
{
public:
void reorderTree() {};
unsigned int directoryCheck(const std::wstring& /*directory*/) const { return DIRECTORY_DONTCARE; };
unsigned __int32 getPriorityClass() const { return PRIORITY_FAST_FILTER; };
};
class isArchive : public fastFilter
{
public:
BOOL include(fileData &file) const
{
return file.getArchive();
}
std::wstring debugTree() const
{
return std::wstring(L"+ ISARCHIVE\n");
};
};
Vì tôi không có một destructor đây ở tất cả, nhưng tuy nhiên điều này được coi là một lớp cơ sở , tôi có cần chèn một destructor ảo rỗng không như thế này ?:
virtual void ~criterion() = 0;
Nếu khai báo phá hủy ảo đó là cần thiết, tất cả các lớp trung gian cũng cần một hay không? I E. fastFilter sẽ ở trên cần một destructor ảo là tốt?
Ở trên không phải là trình phá hủy trống. Đó là một destructor cũng là một chức năng ảo tinh khiết. Điều này không liên quan gì đến việc trống rỗng, và trên thực tế, destructor là đặc biệt ở chỗ nó phải luôn luôn có một định nghĩa ngay cả khi nó thuần ảo. –