non mi aspettavo questo codice per compilare:puntatore Unico e const correttezza
#include <iostream>
#include <memory>
class A
{
public:
inline int get() const
{
return m_i;
}
inline void set(const int & i)
{
m_i = i;
}
private:
int m_i;
};
int main()
{
const auto ptr = std::make_unique<A>();
ptr->set(666); // I do not like this line D:<
std::cout << ptr->get() << std::endl;
return 0;
}
Se PTR era un puntatore cruda C, sarei ok con quello. Ma dal momento che sto usando un puntatore intelligente , non riesco a capire quale sia la logica alla base di questo.
Uso il puntatore univoco per esprimere la proprietà , in Programmazione orientata agli oggetti questa può essere vista come una composizione di oggetto (relazione "parte di").
Ad esempio:
class Car
{
/** Engine built through some creational OO Pattern,
therefore it has to be a pointer-accessed heap allocated object **/
std::unique_ptr<Engine> m_engine;
};
Oppure:
class A
{
class Impl;
std::unique_ptr<A::Impl> m_impl; // PIMPL idiom
};
Se un'istanza di una classe Car è costante, perché il motore non dovrebbe essere costante così? Se fosse un puntatore condiviso, mi sarei trovato perfettamente d'accordo.
C'è un puntatore intelligente che può riflettere il comportamento che voglio?
'ptr-> set (666); // Non mi piace questa riga D: <': Quotazione del giorno;). – 3442