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();
}

因为不需要传递给同一个对象,对自身的引用。