C++ 传递指针引用
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;
}
你通过 "reference" 传递对象,因为你仍然可以通过参数访问原始对象,但请注意 call_print()
中的 base
是一个指针到传入的对象,而不是 actual 对象。如果你想访问传入的对象,你仍然必须取消引用指针:
(*base)->print();
C++ 引入了实际引用,这些引用是您必须使用 pointers/double-pointers 执行的操作的语法糖。例如:
void call_print(Base*& base)
{ base->print(); }
b->call_print(b);
此外,使用双指针或引用似乎没有必要,因为您不需要以任何方式修改指针。为什么不直接接受指针本身?
void call_print(Base* base)
{ base->print(); }
b->call_print(b);
最后,您不需要将 b
作为参数传递给它自己的方法。指向 Base
对象的指针可通过 this
:
访问
void call_print()
{
print(); /* or this->print() */
}
b->call_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;
}
一个简单的注意事项:不要使用裸指针,利用 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
对于基础 class,你必须写:
void call_print() //function call print function
{
this->print();
}
因为不需要传递给同一个对象,对自身的引用。
我想通过引用将指针对象传递给函数。我不知道我是否做对了,因为它没有按照下面的代码工作。请帮助我。
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;
}
你通过 "reference" 传递对象,因为你仍然可以通过参数访问原始对象,但请注意 call_print()
中的 base
是一个指针到传入的对象,而不是 actual 对象。如果你想访问传入的对象,你仍然必须取消引用指针:
(*base)->print();
C++ 引入了实际引用,这些引用是您必须使用 pointers/double-pointers 执行的操作的语法糖。例如:
void call_print(Base*& base)
{ base->print(); }
b->call_print(b);
此外,使用双指针或引用似乎没有必要,因为您不需要以任何方式修改指针。为什么不直接接受指针本身?
void call_print(Base* base)
{ base->print(); }
b->call_print(b);
最后,您不需要将 b
作为参数传递给它自己的方法。指向 Base
对象的指针可通过 this
:
void call_print()
{
print(); /* or this->print() */
}
b->call_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;
}
一个简单的注意事项:不要使用裸指针,利用 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
对于基础 class,你必须写:
void call_print() //function call print function
{
this->print();
}
因为不需要传递给同一个对象,对自身的引用。