【发布时间】:2015-07-22 18:29:00
【问题描述】:
我正在运行静态分析工具并收到错误,因为没有数据成员的抽象类没有构造函数。
给定一个没有数据成员的抽象类:
class My_Interface
{
public:
virtual void interface_function(void) = 0;
};
- 编译器是否生成了任何构造函数?
- 如果生成构造函数,它的内容是什么?
- 如果生成了构造函数,是否会被 优化级别?
静态分析中的规则文档说:
如果你没有在一个类中编写至少一个构造函数,编译器将
默认情况下为您编写一个公共构造函数。此规则检测您是否
不要声明至少一个构造函数。
规则文档参考了 Scott Meyers,“Effective C++: 55 Specific Ways to Improvement your Programs and Design”,第三版。
我的理解是编译器不会为上述情况生成构造函数。
编辑 1:
这不是许多构造函数问题的重复,因为:
- 这个没有数据成员。
- 这不是询问是否需要构造函数,而是询问会发生什么 当没有提供构造函数时。
- 这是 C++ 语言。
【问题讨论】:
-
@DieterLücking:析构函数不是虚拟的,为什么要出现在vtable中?此外,vtable 应该有一个
interface_function条目 -
@DieterLücking:“优化离开”会发生在“无优化”(或调试)设置吗?
标签: c++ constructor abstract-class language-lawyer static-analysis