Я не ожидал, что этот код скомпилировать:Уникальный указатель и сопзЬ правильность
#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;
}
Если PTR был сырой указатель C, я бы хорошо с этим. Но поскольку я использую смарт-указатель , я не могу понять, в чем причина этого.
Я использую уникальный указатель для выражения собственности, в объектно-ориентированном программировании это можно рассматривать как композицию объекта («часть» отношения).
Например:
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;
};
Или:
class A
{
class Impl;
std::unique_ptr<A::Impl> m_impl; // PIMPL idiom
};
Если экземпляр класса Car является постоянной, почему двигатель не должен быть постоянным, а? Если бы это был общий указатель, я был бы полностью в этом.
Есть ли умный указатель, который может отражать поведение, которое я хочу?
'ptr-> set (666); // Мне не нравится эта строка D: <': Цитата дня;). – 3442