【发布时间】:2022-07-22 21:53:46
【问题描述】:
在以下代码sn-p中,g++编译器输出如下错误:
错误:“B::B(const string&)”在此上下文中是私有的 857 |
{ return unique_ptr<_tp>(new _Tp(std::forward<_args>(__args)...)); }
注释掉使用智能指针的行似乎有效。但是,我不确定为什么它适用于其他情况,并且仍然不适用于智能指针情况。
#include <memory>
#include <iostream>
#include "string"
class A;
class B
{
friend class A;
B(const std::string& dummyString) {std::cout << dummyString << std::endl;}
};
class A
{
public:
A()
{
B b("dummy1");
B* pB1 = new B("dummy2");
std::unique_ptr<B> pB2 = std::make_unique<B>("dummy3");
}
};
int main()
{
A a;
}
【问题讨论】:
-
因为
std::make_unique不是A的成员,因此不是B的朋友
标签: c++ friend-class private-constructor