У меня есть определенная стратегия проектирования, где конструктор моего класса является приватным и может быть создан только друзьями класса. Внутри функции friend я пытаюсь создать уникальный_поинтер моего класса с помощью std::make_unique
, но он не компилируется. Мой компилятор VC12 жалуется
c:\program files (x86)\Microsoft Visual Studio 12.0\vc\include\memory (1639): ошибка C2248: "Спам:: Спам": не может получить доступ к закрытому члену, объявленному в классе "Спам"
Соответствующий код, который не выполняется во время компиляции, выглядит следующим образом
#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);
}
Почему я не могу скомпилировать?