澄清函数体/ C ++

时间:2016-06-19 17:57:59

标签: c++

我有这个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;
};

2 个答案:

答案 0 :(得分:4)

  

为什么~CItemPriceListTableCache功能体空?

因为在销毁时不需要采取任何特殊操作,但析构函数仍然应该可以为此类调用。

  

如果我从class.cpp中删除~CItemPriceListTableCache应该没问题?会影响我的代码吗?

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

  

我该怎么替换~CItemPriceListTableCache函数体?我只是不喜欢看空功能。即使我有一行功能对我来说还可以,我只是不喜欢功能是空的。

你可以写

virtual ~CItemPriceListTableCache() {}

virtual ~CItemPriceListTableCache() = default;

在你的班级声明中。

  

如果我完成了从类中删除析构函数的虚拟decalaration应该没问题?

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

答案 1 :(得分:0)

如果没有为类定义析构函数,则使用默认析构函数。但接下来发生的事情是,当一个类有一个构造函数声明为虚拟时,一些编译器会像说Virtual constructor seen, but no virtual destructor一样发出警告,并且在编译代码时始终确保没有警告浮动是很重要的,因此程序员可能会定义一个虚拟析构函数,并将它的主体留空,只是为了取消警告(在这种情况下,虚拟析构函数与默认构造函数执行相同的工作,除了它被声明为virtual)。将它保存在那里并没有什么坏处,有一天你可能还需要它。

尝试删除它们并重新编译以查看是否显示任何警告,如果没有任何警告警告然后你可以将它们全部一起删除(但是使用你的编译器会好运,因为在这种情况下一个好的编译器应该警告你)