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
,所以这是有效的。
如何通过指向 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
,所以这是有效的。