一种奇怪的构造模式

An odd construction pattern

本文关键字:模式 一种      更新时间:2023-10-16

我在很多遗留代码中看到以下模式。我不熟悉它,也无法理解它为什么在那里。

在头文件中:

struct ook
{
  bool func_called; // Not declared as const!
  bool func();
  ook();
};

在源文件中:

ook::ook():
  func_called( func() )
  {} // ← Nothing there whatsoever.
bool ook::func()
{
  // … ← Some stuff without a "return" statement of any kind.
  return true;  // This does mean that func_called is always true.
}   

这是一些可怕的复制和粘贴错误,来自有用的东西还是只是奇怪的?

现在,func_called仅在构造函数中调用,而不在代码中调用其他内容。如果是这样,正如弗洛里安·卡斯特拉内在他的回答中善意指出的那样,拥有它是有道理的。如果它只发生一次,我可以想象它曾经被使用过。但是,它在代码库中发生了几十次,所以我想知道它还有其他用途。

为了特别清楚,这不是我的代码。我只是想理解(没有历史、评论或单元测试)它写的逻辑是什么。也许是没有希望的?

假设其余的代码测试true == func_called,这可以用来确保结构是使用构造函数初始化的。

如果你说的是真的,没有人使用ook::func_called,那么你的代码等效于以下更简单的代码:

struct ook
{
    ook() { func(); }
    void func() { /* Some stuff */ }
};

您应该非常注意复制构造和复制分配是否按预期运行。