gpt4 book ai didi

c++ - 通过构造函数初始化类内部的指针

转载 作者:行者123 更新时间:2023-11-30 01:58:39 24 4
gpt4 key购买 nike

我想创建一个带有指针成员的类,并在构造该类的实例时初始化该指针,如下所示:

#include "stdafx.h"
#include <iostream>

class MyClass {
public:
MyClass(int x): p(&x){}

int getValueOfp()
{
return *p;
}

private:
int* p;
};

int _tmain(int argc, _TCHAR* argv[])
{
int x=5;
MyClass obj1(x);
std::cout<<obj1.getValueOfp();
return 0;
}

问题是,当我调用 getValueOf() 时,我得到的输出不是 p 应该指向的变量的值(在此为 5 case,因为它应该指向 x)。我已经在网上搜索了这个问题的可能答案,但没有任何运气,有人可以告诉我我在这里做错了什么吗? (如您所见,我正在开发 Visual Studio Express)。

最佳答案

MyClass(int x) : p(&x) {}

您的参数是按值传递的,因此会生成一个拷贝。此拷贝是一个临时值,将在构造函数主体结束时过期。因此,您不是使用实际参数的地址初始化 p,而只是它的本地拷贝。当您稍后取消引用指针时,您将找不到其中的实际值,因为到那时该整数已经过期,这是未定义的行为。您需要通过引用 传递您的参数,这样就不会执行复制:

MyClass(int& x) : p(&x) {}
// ^^^^

关于c++ - 通过构造函数初始化类内部的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com