gpt4 book ai didi

c++ - Friend函数无法构造类的唯一指针

转载 作者:IT老高 更新时间:2023-10-28 21:35:56 27 4
gpt4 key购买 nike

我有一定的设计策略,我的类的构造函数是私有(private)的,只能由类的 friend 构造。在 friend 函数中,我正在尝试使用 std::make_unique 创建我的类的唯一指针,但它无法编译。我的 VC12 编译器报错

c:\program files (x86)\microsoft visual studio 12.0\vc\include\memory(1639): error C2248: 'Spam::Spam' : cannot access private member declared in class 'Spam'

编译失败的相关代码如下

#include <memory>
class Spam {
public:
friend void Foo();

private:
Spam(int mem) :mem(mem) {}
int mem;
};
void Foo() {
std::unique_ptr<Spam> spam = std::make_unique<Spam>(10);
}

为什么我无法编译?

最佳答案

这是我见过的另一种方法,显然被称为 passkey idiom:让公共(public)构造函数需要私有(private)访问 token 。

class Spam {
struct Token {};
friend void Foo();
public:
Spam(Token, int mem) : mem(mem) {}

private:
int mem;
};

void Foo() {
std::unique_ptr<Spam> spam = std::make_unique<Spam>(Spam::Token{}, 10);
}

void Bar() {
// error: 'Spam::Token Spam::token' is private
// std::unique_ptr<Spam> spam = std::make_unique<Spam>(Spam::Token{}, 10);
}

关于c++ - Friend函数无法构造类的唯一指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29896268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com