c++ - 堆/堆栈上的类成员分配?

标签 c++ memory-management heap-memory stack-memory

如果一个类声明如下:

class MyClass
{
  char * MyMember;
  MyClass()
  {
    MyMember = new char[250];
  }
  ~MyClass()
  {
    delete[] MyMember;
  }
};

也可以这样做:

class MyClass
{
  char MyMember[250];
};

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

最佳答案

是的,是的,是的。

不过,您的第一个示例中有一些错误:因为它的一个数据成员是一个带有堆分配数据的指针,所以它还应该声明一个复制构造函数和赋值运算符,因为例如...

MyClass(const MyClass& rhs) 
{
  MyMember = new char[250]; 
  memcpy(MyMember, rhs.MyMember, 250);
}

关于c++ - 堆/堆栈上的类成员分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2820477/

相关文章:

C++ 继承和动态库

c++ - 在类成员中正确使用 unique_ptr

c++ - 堆已通过代码在多个地方损坏

java - 如何使用 jstat 或其他基于命令行的工具获取当前/最大 jvm 堆利用率(单个值)?

c++ - 密码 : identify MOV and indirect memory operand

c++ - Visual Studio 2017,如何包含<>?

c# - 结构如何从类型参数约束的类继承?

memory-management - 不可变的字符串和克隆

memory-management - malloc 不保证返回物理上连续的内存

java - 在 Java 中,有没有一种方法可以跟踪变量、方法或类是在堆还是栈中创建的?