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

时间:2013-01-05 07:14:31

标签: c++ pointers reference constants

这可能是一个简单的问题,但我坚持下去。我试图通过它的构造函数将一个对象从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引用传递不是很熟悉。

1 个答案:

答案 0 :(得分:13)

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

ClassB::ClassB(const int& tempX):
     internalX(tempX)
{
}

正如您所说,reference必须立即初始化。因此,如果您希望reference成为班级成员,则 可以使用constructor's initialization list进行设置。

(这short explanation也可能会让你更清楚,因为它专注于你刚刚遇到的情况)

祝你好运