在堆栈上创建类实例

时间:2020-06-24 13:20:57

标签: c++

我试图在C ++中使用一些内存,我为自己定义了一个类,然后在堆中创建了该类的实例。

#include <iostream>

class mojeTrida {
  public:
  
  void TestPrint()
  {
    std::cout << "Ahoj 2\n";
  }
};

int main() {
  mojeTrida *testInstance = new mojeTrida();
  
  testInstance->TestPrint();
  
  std::cout << "Hello World!\n";
}

如果我正确理解c ++,那么每当我调用关键字“ new”时,我都在要求OS给我一定的字节数,以便在堆内部存储新的类实例。

有什么办法可以将我的课程存储在堆栈中?

1 个答案:

答案 0 :(得分:10)

在堆栈上创建 object (即类实例)的方法更加简单-本地变量存储在堆栈中。

int main() {
  mojeTrida testInstance;  // local variable is stored on the stack
  
  testInstance.TestPrint();
  
  std::cout << "Hello World!\n";
}

正如您根据注释所注意到的那样,在调用对象的方法时,将使用运算符.代替->->仅与取消引用它们同时访问其成员的指针一起使用。

带有指向局部变量的指针的示例:

int main() {
  mojeTrida localInstance;  // object allocated on the stack
  mojeTrida *testInstance = &localInstance; // pointer to localInstance allocated on the stack
  
  testInstance->TestPrint();
  
  std::cout << "Hello World!\n";
  // localInstance & testInstance freed automatically when leaving the block
}

另一方面,您应该delete使用new在堆上创建的对象:

int main() {
  mojeTrida *testInstance = new mojeTrida();  // the object allocated on the heap, pointer allocated on the stack
  
  testInstance->TestPrint();

  delete testInstance;  // the heap object can be freed here, not used anymore
  
  std::cout << "Hello World!\n";
}

另请参阅:When should I use the new keyword in C++?