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

MrK*_*ish 10 c++ pointers reference constants

这可能是一个简单的问题,但我坚持下去.我试图通过它的构造函数将一个对象从ObjectA传递给ObjectB(它是ObjectA的一个成员).但是,我想传递一个const引用并无限期地存储该引用,而不是传递值.问题是我不知道该怎么做.

我可以用这样的指针来处理这个问题:

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

ClassB::ClassB( int *tempX )
{
    ptrInternalX = tempX
}
Run Code Online (Sandbox Code Playgroud)

这样,创建一个对象并将指针传递给int,该指针存储在类中以供以后使用.

但是,当使用更大的对象时,指针让我担心内存泄漏和其他问题,所以我想尝试使用'常量引用'(const&)来做这样的事情.但是,这似乎不起作用......

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

ClassB::ClassB( const int &tempX )
{
    internalX = tempX
}
Run Code Online (Sandbox Code Playgroud)

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

这甚至可能吗?或者是否有更好/更清晰的方式做这样的事情?我想使用常量引用的原因是只传递引用而不是大对象的速度,同时保持数据免受意外更改和内存泄漏......我确信有一种简单直接的方法这样做但我对const引用传递不是很熟悉.

cmc*_*cmc 14

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

ClassB::ClassB(const int& tempX):
     internalX(tempX)
{
}
Run Code Online (Sandbox Code Playgroud)

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

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

祝好运

  • 1) `internalX` 应该是 const 2) 这可能会将引用绑定到构造函数本地临时变量,这是不好的 (3认同)
  • 不客气!请看看我给你的链接,“初始化列表”是一个简单的概念,你必须掌握它才能用 C++ 进行开发! (3认同)