一种奇怪的构造模式
An odd construction pattern
我在很多遗留代码中看到以下模式。我不熟悉它,也无法理解它为什么在那里。
在头文件中:
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 */ }
};
您应该非常注意复制构造和复制分配是否按预期运行。
相关文章:
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 在我的情况下,多重继承是一种好的设计模式吗?
- 类型擦除和一种模板方法模式
- 一种在 Mac 上强制关闭模式 QFileDialog 的方法
- 一种奇怪的构造模式
- 是否有一种模式可以使用协议缓冲区而不针对LibProtobuf链接
- C 双重调度,出厂模式或一种从接收到的序列数据创建派生对象的方法
- 寻找一种设计模式以应用于C++
- 是否有一种模式来描述哪个对象控制另一个对象的生命周期?
- 这种Pro*C模式是一种最佳实践,还是有文档记录
- 有没有一种方法可以在c++中实现动态工厂模式
- 仍然是一种观察者模式
- GetLastError()是一种设计模式吗?这是好的机制吗
- 释放模式是一种特殊模式吗
- 这种c++单例模式和方法公开是一种好的实践吗?
- XML类描述到c++类描述:一种设计模式
- 在Windows OpenGL应用程序中是否有一种优雅的方式来处理在全屏和窗口模式之间切换
- "delete p; p = NULL(nullptr);"是一种反模式吗?
- 单一链接列表遵循一种奇怪的显示模式