繁体   English   中英

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

你通过,你仍然必须通过参数访问原始对象,但要注意意义上的“引用”传递对象basecall_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM