【发布时间】:2017-09-10 19:38:19
【问题描述】:
我开始学习动态内存分配的话题了。
我有以下代码:
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main() {
/* Both objects on Stack */
A classAStack;
B classBStack;
/* Both objects on Heap*/
// A *classAHeap = new A();
// B *classBHeap = new B();
/* A objects on Heap B ???*/
A *classAHeap = new A();
return 0;
}
#ifndef A_H_
#define A_H_
#include <iostream>
#include "B.h"
class A {
public:
A();
virtual ~A();
public:
B b;
};
#endif /* A_H_ */
#include "A.h"
A::A() {
std::cout <<"Constructor A called" << std::endl;
}
A::~A() {
}
#ifndef B_H_
#define B_H_
#include <iostream>
class B {
public:
B();
virtual ~B();
};
#endif /* B_H_ */
#include "B.h"
B::B() {
std::cout <<"Constructor B called" << std::endl;
}
B::~B() {
}
调试器的输出是:
临时断点6,main()在../src/HeapStackTest02.cpp:18 18 A类AStack; 断点 4,B::B (this=0x23aa58) at ../src/B.cpp:12 12 std::cout我的问题:
A 类的成员变量 b 在哪里?
如果我查看 0x23a 部分的地址,它似乎是堆栈,而 0x6000 部分似乎是堆。
我正在使用 Windows 64 位系统。
为什么成员变量 b 也在堆上,而没有调用 new 运算符?
【问题讨论】:
-
因为任何
A都包含B。这是一个真正的组合。
标签: c++ heap-memory dynamic-memory-allocation stack-memory