C ++传递指针引用

时间:2015-01-07 20:06:59

标签: c++ pointers 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;
}

3 个答案:

答案 0 :(得分:2)

您通过“参考”传递对象,因为您仍然可以通过参数访问原始对象,但请注意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作为参数传递给自己的方法。可以通过Base

访问指向this对象的指针
void call_print()
{
    print(); /* or this->print() */
}

b->call_print();

答案 1 :(得分: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

对于Base类,你必须写:

void call_print() //function call print function
{
    this->print();
}

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

答案 2 :(得分:-1)

#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;
}