如何通過指向該類物件的唯一指標訪問函式
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();
是我最初的想法,但它不起作用。
uj5u.com熱心網友回復:
您可以將其用作普通指標。例如
( *ptr1 ).getY();
或者
ptr1->getY();
或者甚至喜歡:)
p.get()->getY();
( *p.get() ).getY();
即在類模板中宣告了以下運算子和訪問器 unique_ptr
add_lvalue_reference_t<T> operator*() const;
pointer operator->() const noexcept;
pointer get() const noexcept;
uj5u.com熱心網友回復:
該問題是,由于運算子優先級,當你寫的*ptr1.getY();,那是相當的寫作:
*(ptr1.getY());
因此,這意味著您正在嘗試呼叫以getY智能指標命名的成員函式 ,ptr1但由于ptr1沒有呼叫成員函式,因此getY您會收到錯誤訊息。
要解決這個問題,你應該寫:
( *ptr1 ).getY();//works now
這次您專門詢問/分組*ptr在一起,然后getY在結果物件上呼叫成員函式。并且由于生成的物件是foo具有成員函式的型別,因此getY這是有效的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/370434.html
下一篇:包含分配指標的結構向量無法銷毀
