通过构造函数传递和存储const引用

Passing and storing a const reference via a constructor?

本文关键字:存储 const 引用 构造函数      更新时间:2023-10-16

这可能是一个简单的问题,但我被它卡住了。我试图通过它的构造函数将对象从ObjectA传递到ObjectB(这是ObjectA的成员)。但是,我不想按值传递,而是只想传递一个const引用并无限期地存储该引用。问题是我不知道该怎么做。

我可以像这样用指针来实现

class ClassB
{
private:
    int *ptrInternalX;
public:
    ClassB( int *tempX );
}
ClassB::ClassB( int *tempX )
{
    ptrInternalX = tempX
}

通过这种方式,创建一个对象并传递一个指向int型的指针,该指针存储在类中以供以后使用。

然而,指针让我担心内存泄漏和其他问题时,使用较大的对象,所以我想尝试做这样的事情使用'常量引用' (const &)。然而,这似乎不工作…

class ClassB
{
private:
    int &internalX;
public:
    ClassB( const int &tempX );
}
ClassB::ClassB( const int &tempX )
{
    internalX = tempX
}

我知道引用本质上是现有变量的"别名"(引用相同内存地址的不同名称),它们需要使用现有变量立即初始化。所以这会在我的程序中产生一个错误!

这可能吗?或者是否有更好/更清楚的方法来做这样的事情?我想使用常量引用的原因是传递一个引用而不是一个大对象的速度,同时保持数据安全,避免意外更改和内存泄漏……我相信有一种简单直接的方法可以做到这一点,但我对const引用传递不太熟悉。

class    ClassB
{
    private:
        const int&    internalX;
    public:
        ClassB(const int& tempX);
}
ClassB::ClassB(const int& tempX):
     internalX(tempX)
{
}

如您所说,必须立即初始化reference。因此,如果你想让你的reference成为一个类成员,你可以使用构造函数的初始化列表来设置它。

(这个简短的解释可能会让你更清楚,因为它是专门针对你刚刚遇到的情况的)

好运