Ho una certa strategia di progettazione in cui il costruttore della mia classe è privato e può essere costruito solo dagli amici della classe. All'interno della funzione friend, sto cercando di creare un unique_pointer della mia classe usando std::make_unique
ma non viene compilato. Il mio compilatore VC12 si lamentaLa funzione amico non è in grado di costruire un puntatore univoco della classe
c: \ programmi di studio (x86) \ Microsoft Visual 12.0 \ VC \ include \ memoria (1639): l'errore C2248: 'Spam :: Spam': non può accedere membro privato dichiarato in classe 'Spam'
Il codice in questione che non riesce durante la compilazione è il seguente
#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);
}
Perché non sono in grado di compilare?
Sì, hai ragione. Potete aggiungere ulteriori dettagli alla risposta? – Abhijit
Non c'è alcuna garanzia che 'make_unique' non possa delegare ad un helper interno, nel qual caso il tuo' amico' non funzionerà (per non dire che la firma è sbagliata anche perché 'make_unique' prende i suoi argomenti inoltrando il riferimento). –
Hai ragione. L'ho cancellato. –