C++ 堆分配对象中的堆栈对象在c++;?
Iam有两个等级C++ 堆分配对象中的堆栈对象在c++;?,c++,C++,Iam有两个等级A类和B类 class A { int width; int height; }; class B { A obj; }; 我正在尝试创建一个如下所示的指针 B* myObj = new B(); 在这里,myObj在堆中创建。obj、width和height在哪里创建 指向对象的指针在堆栈上创建,在程序中称为myObj 对象本身B()是在堆上创建的width和height包含在B()占用的内存中,因此也在堆中 在Ascii艺术中: Stack ---
A类
和B类
class A
{
int width;
int height;
};
class B
{
A obj;
};
我正在尝试创建一个如下所示的指针
B* myObj = new B();
在这里,
myObj
在堆中创建。obj
、width
和height
在哪里创建 指向对象的指针在堆栈上创建,在程序中称为myObj
对象本身B()
是在堆上创建的width
和height
包含在B()
占用的内存中,因此也在堆中
在Ascii艺术中:
Stack --- myObj
|
Heap [ B -- A [ Width, Height ] ]
对象可以包含其他对象,称为子对象。子对象可以是成员子对象、基类子对象或数组元素
子对象和引用成员的存储持续时间是其完整对象的存储持续时间
由
myObj
指向的B
对象的成员都包含在该B
对象中,并且它们都具有相同的(动态)存储持续时间。myObj
将在堆栈上创建,但其地址将指向堆上的地址。在用户代码中不得使用new
!使用std::make_shared
或std::make_unique
代替:auto my_obj{std::make_unique()代码>myObj
不是类型为B
的对象。它是一个指针类型,它指向代码代码> > C++,和其他语言一样,