tôi đã không hy vọng mã này để biên dịch:con trỏ độc đáo và đúng đắn 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;
}
Nếu ptr là một con trỏ C thô, tôi sẽ ok với điều đó. Nhưng vì tôi đang sử dụng con trỏ thông minh thông minh, tôi không thể hiểu lý do đằng sau điều này là gì.
Tôi sử dụng con trỏ duy nhất để thể hiện quyền sở hữu, trong Lập trình hướng đối tượng, điều này có thể được xem là thành phần đối tượng (mối quan hệ "một phần").
Ví dụ:
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;
};
Hoặc:
class A
{
class Impl;
std::unique_ptr<A::Impl> m_impl; // PIMPL idiom
};
Nếu một thể hiện của một lớp Car là liên tục, tại sao Engine không nên thường xuyên không? Nếu đó là một con trỏ chia sẻ, tôi sẽ hoàn toàn ổn với điều đó.
Có một con trỏ thông minh nào có thể phản ánh hành vi tôi muốn không?
'ptr-> set (666); // Tôi không thích dòng này D: <': Trích dẫn trong ngày;). – 3442