如果类具有不可访问的(私有)析构函数,是否可以将其按值传递给函数,如下例所示?
class A {
~A() {}
};
// ok in GCC and Clang, error in MSVC
void f(A) {}
GCC 和 Clang 都接受这个程序,而 MSVC 拒绝它并出现错误:
<source>(6): error C2248: 'A::~A': cannot access private member declared in class 'A'
在线演示:https://gcc.godbolt.org/z/884176rWW
这里根据标准哪个编译器是正确的还是没有指定?
该函数未被调用。如果您将其调用添加到 main 中,例如
f( A() );
那么所有三个编译器都会发出错误。
当然,如果析构函数不可访问并且必须用于销毁指定类类型的对象,则该程序无效。