堆成员/堆栈上的类成员分配?

Sim*_*ect 9 c++ heap stack memory-management

如果一个类声明如下:

class MyClass
{
  char * MyMember;
  MyClass()
  {
    MyMember = new char[250];
  }
  ~MyClass()
  {
    delete[] MyMember;
  }
};
Run Code Online (Sandbox Code Playgroud)

它可以这样做:

class MyClass
{
  char MyMember[250];
};
Run Code Online (Sandbox Code Playgroud)

如何在堆上分配类,如果我这样MyClass * Mine = new MyClass(); 做.分配的内存是否也在第二个示例中分配250个字节以及类实例化?并且该成员在MyClass对象的整个生命周期内是否有效?至于第一个例子,在堆上分配类成员是否实用?

Chr*_*isW 7

是的,是的,是的.

你的第一个例子中有一个bug,但是:因为它的一个数据成员是一个带有堆分配数据的指针,所以它还应该声明一个copy-constructor和赋值运算符,例如. ..

MyClass(const MyClass& rhs) 
{
  MyMember = new char[250]; 
  memcpy(MyMember, rhs.MyMember, 250);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然技术上克里斯是正确的,但这样做并不是一个好主意.使用std :: vector <char>代替所有内存管理.要查看完整详细信息,请访问:http://stackoverflow.com/questions/255612/c-dynamically-allocating-an-array-of-objects/255744#255744 (2认同)