【发布时间】:2019-10-16 11:39:25
【问题描述】:
我有以下类: 删除了复制构造函数的 A 类。
class A
{
public:
explicit A(int i_a) {a = i_a;};
~A(){};
private:
A(const A&) = delete;
A& operator=(const A&) = delete;
int a;
};
和具有 unique_ptr 成员的 B 类。
class A;
class B
{
public:
B(int i_b);
~B() {};
private:
std::unique_ptr<A> p_b;
};
和 B.cpp:
B::B(int i_b)
{
p_b = std::make_unique<A>(A(i_b));
}
我在制作 A 类的 unique_ptr 时收到此错误:
'A::A':无法访问在类'A'中声明的私有成员
谁能解释一下为什么我会收到这个错误?我知道通过评论这一行“A(const A&) = delete;”错误将得到解决。但我正在寻找一些解释。
【问题讨论】:
-
附带说明,更典型的做法是将
deleted 函数声明为public- 这样您就可以得到清晰的错误消息,而不是将其隐藏在cannot access private member之下。当我们无法使用delete关键字时,将复制构造函数声明为private是一种旧的(C++11 之前的)方法来禁用它们。
标签: c++