Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 堆分配对象中的堆栈对象在c++;?_C++ - Fatal编程技术网

C++ 堆分配对象中的堆栈对象在c++;?

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 ---

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 --- 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++,和其他语言一样,