[英]C++ passing pointer reference
我想通過引用將指針對象傳遞給函數。 我不知道我做的是否正確,因為它無法按照以下代碼運行。 請幫我。
class Base
{
public:
int x;
void print()// function prints x value
{
cout<<x;
}
void call_print(Base **base) //function call print function
{
base->print();
}
};
int main()
{
Base *b = new Base; // creating pointer object
b->call_print(&b); // passing pointer by reference
return 0;
}
你通過,你仍然必須通過參數訪問原始對象,但要注意意義上的“引用”傳遞對象base
在call_print()
是一個指向對象的指針傳遞中,而不是實際的對象。 如果要訪問傳入的對象,仍然必須取消引用指針:
(*base)->print();
C ++引入了實際的引用,這些引用是語法上與指針/雙指針有關的內容。 例如:
void call_print(Base*& base)
{ base->print(); }
b->call_print(b);
另外,似乎不需要使用雙指針或引用,因為您無需以任何方式修改指針。 為什么不只使用指針本身呢?
void call_print(Base* base)
{ base->print(); }
b->call_print(b);
最后,您不需要將b
作為參數傳遞給它自己的方法。 可以通過this
方式訪問指向Base
對象的指針:
void call_print()
{
print(); /* or this->print() */
}
b->call_print();
一個簡單的注釋:不要使用裸露的指針,要利用C ++ 11的功能:std :: unique_ptr和std :: shared_ptr更好,出於資源管理的考慮,您可以編寫如下代碼:
std::unique_ptr<Base> base_ptr(new Base());
base_ptr->call_print();
//no delete, unique_ptr deletes itself automatically
對於基類,您必須編寫:
void call_print() //function call print function
{
this->print();
}
因為您不需要傳遞給同一對象,即對自身的引用。
#include <iostream>
using namespace std;
class Base
{
public:
int x;
void print()
{
cout<<x<<endl;
}
};
class Base2
{
public:
void change_value(Base *&base)
{
base->x = 5;
}
};
int main()
{
Base *b = new Base;
Base2 b2;
b2.change_value(b);
b->print();
delete b;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.