访问类方法中的私有指针变量C++
Accessing private pointer variables in C++ class methods
我有这个代码:
#include<iostream>
class Test {
private:
int iNum;
int *ptr;
public:
Test(int iFirst, int iSecond);
void setNum(int iValue);
int getNum();
int getFirstNum();
int getSecondNum();
};
Test::Test(int iFirst, int iSecond) {
int *ptr = (int *)malloc(sizeof(int) * 2);
ptr[0] = iFirst;
ptr[1] = iSecond;
}
void Test::setNum(int iValue) {
iNum = iValue;
}
int Test::getNum() {
return iNum;
}
int Test::getFirstNum() {
return ptr[0];
}
int Test::getSecondNum() {
return ptr[1];
}
int main() {
Test oTest(3,4);
std::cout << oTest.getFirstNum() << std::endl;
return 0;
}
我只是不明白为什么当我尝试使用 getFirstNum() 方法返回 ptr[0] 时我得到垃圾值。请启发我这在内存中的行为以及修复它的可能方法。谢谢i
你的错误在于你的构造函数:
int *ptr = (int *)malloc(sizeof(int) * 2);
在这里,您声明了一个名为 ptr
的变量。但是,您已经有一个名为 ptr
的变量作为类的成员。这称为阴影。编译器将始终使用范围最窄的变量版本,在本例中为在构造函数中声明的版本。当你的构造函数返回时,它会被丢弃,并且类中的ptr
永远不会被触及。
若要解决此问题,请不要重新声明变量:
ptr = (int *)malloc(sizeof(int) * 2);
int *ptr = (int *)malloc(sizeof(int) * 2);
在构造函数中,您创建了一个新的指针ptr
从而隐藏了类成员ptr
。由于它是一个新指针,因此您的类成员ptr
永远不会初始化。从此行中删除int *
,这将初始化类成员ptr
。
ptr = (int *)malloc(sizeof(int) * 2);
另一件事是,由于您正在为ptr
动态分配内存,因此您必须在析构函数中删除它。否则会泄漏内存。
#include<iostream>
class Test {
private:
int iNum;
int *ptr;
public:
Test(int iFirst, int iSecond);
~Test();
void setNum(int iValue);
int getNum();
int getFirstNum();
int getSecondNum();
};
Test::Test(int iFirst, int iSecond) {
ptr = new int[2];
ptr[0] = iFirst;
ptr[1] = iSecond;
}
Test::~Test()
{
delete[] ptr;
}
void Test::setNum(int iValue) {
iNum = iValue;
}
int Test::getNum() {
return iNum;
}
int Test::getFirstNum() {
return ptr[0];
}
int Test::getSecondNum() {
return ptr[1];
}
int main() {
Test oTest(3, 4);
std::cout << oTest.getFirstNum() << std::endl;
return 0;
}
你把它当作c,而不是c++。我修复了我看到的问题,您使用的是 malloc 而不是新的,而且您正在创建一个新的 int*ptr 而不是使用成员,因此当您在 getter 函数中调用它时它是无效的。
也是一个析构函数并删除内存。
相关文章:
- 指针变量在 cout 函数中不起作用
- 如何将指针变量作为引用参数传递?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 我试图了解在异或操作后指针变量正在更改
- 调用带有指针对象错误的指针变量
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- 非指针变量和类成员上的新放置
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- 全局外部指针变量在 DLL 中不可见
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- C++ 中指针变量的内存释放
- 使用指针变量打印特定的数组变量
- 如何使用构造函数初始化内存地址(指针变量)?
- 如何释放为指针变量本身提供的内存?
- 如果地址已知,如何获取指针变量的名称
- 如何处理参数中的基类和指针变量
- 指针变量 在数组中定位零
- 隐式指针变量,在自动定义中具有另一个指针变量
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- 错误 C4703 可能未初始化的局部指针变量'y'使用