私がコンパイルし、このコードを期待していなかった。ユニークなポインタとconstの正しさ
#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;
}
生CのポインタだったPTR場合、私はそれでOKでしょう。しかし、私はスマートポインタを使用しているので、私はこれの背後にある根拠を理解できません。
という所有権を表すオブジェクト指向プログラミングでは、これはオブジェクトの構成(部分的な関係)とみなされる可能性があります。例えば
:
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
};
クラスの車のインスタンスが定数であれば、なぜエンジンは同様に一定であるべきではないのですか?それが共有ポインタだったら私はそれで完全にうまくいっていたでしょう。
私が望む動作を反映できるスマートポインタはありますか?
'ptr-> set(666); //私はこの行が好きではありませんD:<':今日の見積もり;)。 – 3442