3

这个问题涉及到我对 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

4 回答 4

11

pValue 需要是 Grid 类的成员变量。

class Grid
{
  private: int* pValue;
  public: void HeapValues();
          void AccessHeap();
};

现在可以从 Grid 的任何成员函数访问成员变量 pValue。

于 2009-01-02T08:44:31.627 回答
6

完成后不要忘记删除析构函数中的指针。欲了解更多信息,请访问:

于 2009-01-02T08:57:41.210 回答
2

就像 Aaron 所说,您可以将值设为 Grid 类的成员。在这种情况下,尽管不需要它是指向 int 的指针。

class Grid
{
private:

    int value;

public:

    void HeapValue();
    void AccessHeap();
};

无论在何处实例化,该值都将作为对象的一部分存储。你可以把它放在堆栈或堆上,没关系。对于简单的值,例如类实例拥有的内置类型和对象,没有必要使用 new 分配它们。这样您就不必担心使用 Grid 析构函数中的 delete 运算符进行清理,只需确保正确处理拥有的 Grid 实例;-)

粗略地说,随着您对 C++ 的深入研究,您将学习到一些例外情况,但对于您的示例,上述内容会很好。

于 2009-01-02T10:33:37.583 回答
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,但我不确定“数据”是什么成员函数”的意思。)

于 2009-01-03T14:28:46.897 回答