可以在函数中通过值传递具有私有析构函数的对象吗?

问题描述 投票:0回答:1

如果类具有不可访问的(私有)析构函数,是否可以将其按值传递给函数,如下例所示?

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

这里根据标准哪个编译器是正确的还是没有指定?

c++ function language-lawyer destructor private
1个回答
1
投票

该函数未被调用。如果您将其调用添加到 main 中,例如

f( A() );
那么所有三个编译器都会发出错误。

当然,如果析构函数不可访问并且必须用于销毁指定类类型的对象,则该程序无效。

© www.soinside.com 2019 - 2024. All rights reserved.