我有这个class.h:
class CItemPriceListTableCache: public cache< TItemPriceListTable >
{
public:
virtual ~CItemPriceListTableCache();
};
我有这个class.cpp:
CItemPriceListTableCache::~CItemPriceListTableCache()
{
}
现在来问题:
为什么~CItemPriceListTableCache
功能体空?
如果我从class.cpp
删除~CItemPriceListTableCache
应该没问题?会影响我的代码吗?我该怎么替换~CItemPriceListTableCache
函数体?我只是不喜欢看空功能。即使我有一行功能对我来说还可以,我只是不喜欢功能是空的。
如果我完成从类中删除析构函数的虚拟decalaration应该可以吗?
编辑1:删除了无用的txt。
编辑2: class.h
class DH2KeyAgreement: public KeyAgreement
{
public:
DH2KeyAgreement();
};
class.cpp
DH2KeyAgreement::DH2KeyAgreement() : dh_(), dh2_(dh_)
{
}
我应该如何使用default
?
应该这样吗?
class DH2KeyAgreement: public KeyAgreement
{
public:
DH2KeyAgreement():dh_(), dh2_(dh_)=default;
};
答案 0 :(得分:4)
为什么
~CItemPriceListTableCache
功能体空?
因为在销毁时不需要采取任何特殊操作,但析构函数仍然应该可以为此类调用。
如果我从class.cpp中删除~CItemPriceListTableCache应该没问题?会影响我的代码吗?
是的,您将留下未定义的引用错误。
我该怎么替换~CItemPriceListTableCache函数体?我只是不喜欢看空功能。即使我有一行功能对我来说还可以,我只是不喜欢功能是空的。
你可以写
virtual ~CItemPriceListTableCache() {}
或
virtual ~CItemPriceListTableCache() = default;
在你的班级声明中。
如果我完成了从类中删除析构函数的虚拟decalaration应该没问题?
是的,编译器生成的默认析构函数就可以了。
答案 1 :(得分:0)
如果没有为类定义析构函数,则使用默认析构函数。但接下来发生的事情是,当一个类有一个构造函数声明为虚拟时,一些编译器会像说Virtual constructor seen, but no virtual destructor
一样发出警告,并且在编译代码时始终确保没有警告浮动是很重要的,因此程序员可能会定义一个虚拟析构函数,并将它的主体留空,只是为了取消警告(在这种情况下,虚拟析构函数与默认构造函数执行相同的工作,除了它被声明为virtual
)。将它保存在那里并没有什么坏处,有一天你可能还需要它。
尝试删除它们并重新编译以查看是否显示任何警告,如果没有任何警告警告然后你可以将它们全部一起删除(但是使用你的编译器会好运,因为在这种情况下一个好的编译器应该警告你)