I'd like a member function to return a unique_ptr reference to a const type, just like in raw pointers.
Here is what I mean:
class Foo {
private:
int _number;
public:
[[nodiscard]] explicit Foo(int number) : _number(number) {}
[[nodiscard]] int number() const { return _number; }
void set_number(int number) { _number = number; }
};
class ManageFoo {
private:
std::unique_ptr<Foo> foo_ptr;
public:
explicit ManageFoo(std::unique_ptr<Foo> &&foo_ptr) : foo_ptr(std::move(foo_ptr)) {};
void set_number(const int &number) {
foo_ptr->set_number(number);
// And perform something else...
}
const Foo *getFoo() { return foo_ptr.get(); }
};
I want the user of ManageFoo
to change the state of Foo only through ManageFoo's set_number
. That's why I want getFoo
to return a pointer to const Foo
. I want the user to access only a read-only version of Foo
. In order to avoid using foo_ptr.get()
is it possible to write a getFoo
returning std::unique_ptr<const Foo>&
?
void set_number(const int &number) { foo_ptr->set_number(number); // And perform something else... }
foo_ptr
never seems to get null. Then it can be like below to resolve your concerns in the comments.
const Foo& getFoo() const { return *foo_ptr; }