как сделать функцию друга std::make_shared()
.
Я пытался:
class MyClass{
public:
friend std::shared_ptr<MyClass> std::make_shared<MyClass>();
//or
//friend std::shared_ptr<MyClass> std::make_shared();
protected:
MyClass();
};
но это не работает (я использую Visual Studio 2010 SP1)
make_shared
— это (вариативный) шаблон, и в любом случае, зачем ему быть другом? Ваш конструктор частный? Если да, то почему бы не использоватьshared_from_this
? - person Kerrek SB   schedule 23.09.2011std::make_shared
следует просто использовать - на самом деле вы не должны объявлять эту функцию, поскольку она уже существует как часть стандартной библиотеки. Вы пытаетесь вернуть общий указатель из своего собственного класса, используя специальный метод? В противном случае потребители вашего класса должны просто иметь возможность использоватьstd::make_shared
в своем коде. - person Platinum Azure   schedule 23.09.2011shared_from_this
создает экземпляр класса? Насколько я знаю, это единственный перенос существующего экземпляра, который указанthis
какshared_ptr
- person uray   schedule 23.09.2011make_shared
(то есть с фабричным методом), но никакая реализация не может обойти этот тип контроля доступа и при этом иметь четко определенное поведение. - person Billy ONeal   schedule 23.09.2011make_shared
на самом деле вызывает не конструктор, а какой-то другой внутренний класс. - person Kerrek SB   schedule 23.09.2011shared_ptr
, который вызывает конструктор. - person uray   schedule 23.09.2011