关于函数体/C++的澄清

关于函数体/C++的澄清,c++,C++,我有这门课。h: class CItemPriceListTableCache: public cache< TItemPriceListTable > { public: virtual ~CItemPriceListTableCache(); }; 现在问题来了: 为什么~CItemPriceListTableCache函数体为空? 如果我从class.cpp中删除~CItemPriceListTableCache,应该可以吗?这会影响我的代码吗?我应该用什么替

我有这门课。h:

class CItemPriceListTableCache: public cache< TItemPriceListTable >
{
public:
    virtual ~CItemPriceListTableCache();    
};
现在问题来了: 为什么~CItemPriceListTableCache函数体为空? 如果我从class.cpp中删除~CItemPriceListTableCache,应该可以吗?这会影响我的代码吗?我应该用什么替换~CItemPriceListTableCache函数体?我只是不喜欢看到空函数。即使我有一行函数对我来说是可以的,我只是不喜欢函数为空。 若我完成了从类中删除析构函数的虚拟剥离,那个么应该可以吗

编辑1:从问题中删除无用的文本

编辑2: h班

class.cpp

DH2KeyAgreement::DH2KeyAgreement() : dh_(), dh2_(dh_)
{

}
我应该如何在这里使用默认值

我应该这样好吗

class DH2KeyAgreement: public KeyAgreement
{
public:
    DH2KeyAgreement():dh_(), dh2_(dh_)=default;
};
为什么~CItemPriceListTableCache函数体为空

因为不需要对销毁执行特殊操作,但是该类仍然可以调用析构函数

如果我从class.cpp中删除~CItemPriceListTableCache,应该可以吗?这会影响我的代码吗

是的,您将留下一个未定义的引用错误

我应该用什么替换~CItemPriceListTableCache函数体?我只是不喜欢看到空函数。即使我有一行函数对我来说是可以的,我只是不喜欢函数为空

你可以写

virtual ~CItemPriceListTableCache() {}

在你的班级宣言中

若我完成了从类中删除析构函数的虚拟剥离,那个么应该可以吗

是的,编译器生成的默认析构函数就可以了

为什么~CItemPriceListTableCache函数体为空

因为不需要对销毁执行特殊操作,但是该类仍然可以调用析构函数

如果我从class.cpp中删除~CItemPriceListTableCache,应该可以吗?这会影响我的代码吗

是的,您将留下一个未定义的引用错误

我应该用什么替换~CItemPriceListTableCache函数体?我只是不喜欢看到空函数。即使我有一行函数对我来说是可以的,我只是不喜欢函数为空

你可以写

virtual ~CItemPriceListTableCache() {}

在你的班级宣言中

若我完成了从类中删除析构函数的虚拟剥离,那个么应该可以吗


是的,编译器生成的默认析构函数就可以了。

如果没有为类定义析构函数,则使用默认析构函数。但是,当一个类有一个构造函数声明为virtual时,一些编译器会发出警告,比如说virtual constructor seen,但没有虚拟析构函数,并且在编译代码时始终确保没有任何警告浮动,这一点很重要,因此,程序员可能会定义一个虚拟析构函数,并将其主体留空,以消除警告。在本例中,虚拟析构函数的工作与默认构造函数相同,只是它被声明为虚拟的。把它放在那里不会有什么坏处,但总有一天你可能会需要它。试着删除它们并重新编译,看看是否显示任何警告,如果没有任何警告,那么你可以一起删除它们,但祝你的编译器好运,因为一个好的编译器应该在这种情况下警告您,如果没有为类定义析构函数,则使用默认的析构函数。但是,当一个类有一个构造函数声明为virtual时,一些编译器会发出警告,比如说virtual constructor seen,但没有虚拟析构函数,并且在编译代码时始终确保没有任何警告浮动,这一点很重要,因此,程序员可能会定义一个虚拟析构函数,并将其主体留空,以消除警告。在本例中,虚拟析构函数的工作与默认构造函数相同,只是它被声明为虚拟的。把它放在那里不会有什么坏处,但总有一天你可能会需要它。试着删除它们并重新编译,看看是否显示任何警告,如果没有任何警告,那么你可以一起删除它们,但祝你的编译器好运,因为一个好的编译器应该在这种情况下警告你什么是缓存?编辑的主要问题@πάνταῥεῖ什么是缓存?编辑的主要问题@πάνταῥεῖ如果基类具有虚拟析构函数,则无需在派生类中写入空的虚拟析构函数。编译器生成的析构函数将是虚拟的。@πάνταῥεῖ 我编辑了这个问题以避免另一个。。如果基类有一个虚拟析构函数,那么就不需要在派生类中编写一个空的虚拟析构函数。编译器生成的析构函数将是虚拟的。@πάνταῥεῖ 我编辑了这个问题以避免另一个。。你能看看吗?
virtual ~CItemPriceListTableCache() {}
virtual ~CItemPriceListTableCache() = default;