这个问题让我对C ++知之甚少。我试图访问我放在堆中的特定值,但我不确定如何访问它。在我的问题中,我在一个对象中的数据成员函数中放置了一个值,我试图在另一个数据成员函数中访问它。问题是我不知道如何,我在网上搜索过例子,但没有一个是我需要的东西,因为它们都在int main()中并且不是我需要的具体内容。
在第一个数据成员函数中,我声明了我想要发送给Heap的值; 这是我的第一个数据成员函数的一个例子。
void Grid::HeapValues()
{
//Initializing Variable
value = 2; //The type is already declared
//Pointers point a type towards the Heap
int* pValue = new int;
//Initialize an a value of in the Heap
*pValue = value;
}
在数据成员函数中这是想要的:
void Grid::AccessHeap()
{
//Extracting heap:
int heap_value = *pValue; //*pValue does not exist in this function
cout << heap_value; //Delays the value 2, which is found
//in the first data member function
}
我觉得愚蠢的问,但我找不到答案,也不知道如何。有谁知道如何以简单的方式从堆中访问值?我需要能够访问两个以上的数据成员函数。
答案 0 :(得分:11)
pValue需要是Grid类的成员变量。
class Grid
{
private: int* pValue;
public: void HeapValues();
void AccessHeap();
};
现在可以从Grid的任何成员函数访问成员变量pValue。
答案 1 :(得分:6)
完成后不要忘记在析构函数中删除指针。欲了解更多信息,请访问:
答案 2 :(得分:2)
就像Aaron所说,你可以使值成为Grid类的成员。在这种情况下,虽然它不需要是指向int的指针。
class Grid
{
private:
int value;
public:
void HeapValue();
void AccessHeap();
};
该值将作为对象的一部分存储在其实例化的任何位置。你可以在堆栈或堆上创建它,这没关系。对于类似内置类型的简单值和将由类实例拥有的对象,不必使用new分配它们。这样您就不必担心在Grid析构函数中使用delete运算符进行清理,只需确保正确处理拥有的Grid实例; - )
粗略的是有一些例外情况,当你深入研究C ++时,你会学习,但是对于你的例子,上面的情况会很好。
答案 3 :(得分:0)
为什么要在堆上?如果将它作为类的一部分添加,那么它将在类的相同位置,可能在堆栈或全局内存中。也许你想要一个可变大小的整数指针?在这种情况下,您需要确保在完成内存后释放内存。
堆上的东西的问题是找到它。除非您为此添加机制,否则无法按名称访问它。不知何故,您需要将位置传达给访问它的任何代码。在这种情况下,看起来您只需要在Grid类中进行访问,因此很容易。只需将它变成Aaron所指示的成员变量即可。你最终会得到类似的东西:
class Grid
{
protected:
int* pVals;
public:
Grid() pVals(NULL) { }
~Grid() { delete [] pVals; }
void HeapValues() {
pVals = new int[getHeapValuesSize()];
pVals[0] = 1; // ...
}
void AccessHeap() {
cout << pVals[0]; // ...
}
(在旁注中,当你的意思是“成员函数”时,你似乎正在使用短语“数据成员函数”。“数据成员”指的是类的成员数据,如pVals,但我不确定“数据成员函数”意味着什么。)