C ++访问堆

时间:2009-01-02 08:38:46

标签: c++ heap data-access

这个问题让我对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
}

我觉得愚蠢的问,但我找不到答案,也不知道如何。有谁知道如何以简单的方式从堆中访问值?我需要能够访问两个以上的数据成员函数。

4 个答案:

答案 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,但我不确定“数据成员函数”意味着什么。)