通过使用SonarLint分析代码,我收到了一条关于声明如下的析构函数的消息(问题的标题) :
class Foo
{
public:
. // default ctor
. // parameterized ctor
.
inline ~Foo() = default; // dtor
.
. // copy ctor = delete
. // copy assignment operator = delete
. // move ctor
. // move assignment operator
private:
...
mutable std::vector< std::vector<char> > m_Matrix;
...
};
这是消息的描述: 声明一个函数或一个静态成员变量 constexpr 使其隐式内联。
我不认为此类的 dtor 可以是constexpr
,或者consteval
因为它具有类型的非静态数据成员,std::vector
因此~Foo
必须在某些时候调用delete[]
以释放向量的存储空间。
那么为什么SonarLint 会显示此消息?是因为 = default
? 是否有任何默认的特殊成员函数隐式变为constexpr
?