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 引用传递不是很熟悉。

4

1 回答 1

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

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

正如你所说, areference必须立即初始化。因此,如果您希望自己reference成为类成员,则必须使用构造函数的初始化列表来设置它。

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

祝你好运

于 2013-01-05T07:16:58.637 回答