这可能是一个简单的问题,但我坚持。我正在尝试通过其构造函数将对象从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
成为类(class)成员,则具有可以使用constructor's initialization list进行设置。(此short explanation可能还会使您更清楚,因为它专门针对您刚刚遇到的情况)
祝好运