Cpp/ C++ unique Pointer on objects access functions that class

Cpp/ C++ unique Pointer on objects access functions of that class

如何通过指向 class

对象的唯一指针访问函数
struct foo
{
    foo(int);
    void getY();
};

int main()
{
    foo f1(1);
    f1.getY();
    std::unique_ptr<foo> ptr1 = make_unique<foo>(2);
    *ptr1.getY(); // Error
};

foo 有一个以 int 作为参数的构造函数,getY() 只是打印出那个 int 值。

显然 foo f1(1); f1.getY(); 有效,但不知道如何通过指针访问 getY()unique_ptr<foo> ptr1 = make_unique<foo>(2); *ptr1.getY(); 是我最初的想法,但行不通。

您可以将其用作普通指针。例如

( *ptr1 ).getY();

ptr1->getY();

甚至喜欢:)

p.get()->getY();
( *p.get() ).getY();

即在class模板unique_ptr

中声明了以下运算符和访问器
add_lvalue_reference_t<T> operator*() const;
pointer operator->() const noexcept;
pointer get() const noexcept;

问题是由于运算符优先级当你写*ptr1.getY();时,它是等价的 写作:

*(ptr1.getY());

所以这意味着你试图在智能指针 ptr1 上调用一个名为 getY 的成员函数,但是由于 ptr1 没有名为 getY 的成员函数,你得到错误。

解决 你应该这样写:

( *ptr1 ).getY();//works now 

这次你专门 asking/grouping *ptr 在一起,然后在结果对象上调用成员函数 getY 。由于生成的对象是 foo 类型,它有一个成员函数 getY,所以这是有效的。