在头文件 test.h 中声明了一个vector<int>counts(0)
该头文件中有一个自定义类ClassA,ClassA的构造函数中会向counts添加一个整数对象0
ClassA::ClassA()
{
counts.push_back(0);
}
这样想要的效果是每构造一个ClassA的对象,counts的长度就会加一。
但是测试发现,在包含了test.h的主CPP中声明的全局ClassA对象并不能使counts长度增加,而只有在test.cpp中声明的全局ClassA对象才会使counts长度增加,或者在主CPP中的局部ClassA对象也可以使counts长度增加。
跟踪构造函数的时候得到,主CPP中的ClassA全局对象最先构造,而且确实成功往counts中添加了0,但是为什么这之后counts就复位清空了,无论counts声明的时候加不加static都是一样的效果,求大神解答,这是否与编译的机制有关。
//test.h
#include "vector"
using namespace std;
static vector<int>counts(0); //vector对象
class ClassA
{
public:
ClassA();
};
int GetSize();
//test.cpp
#include "stdafx.h"
#include "test.h"
ClassA::ClassA()
{
counts.push_back(0);
}
int GetSize()
{
return counts.size();
}
ClassA InA, InB; //在解释CPP中声明两个对象
//主CPP,该win32应用程序的入口函数和消息循环所在的CPP文件
//......创建窗体等自动生成的代码省略,只在预编译指令后加上全局对象的声明
#...
#include "test.h"
ClassA OutA; //在主CPP中声明一个对象
//...
WM_KEYDOWN
wchar_t num[2] = L"0";
num[0] += GetSize(); //简便起见,只测试10以内的个数
MessageBox(NULL, num, L"size", MB_OK);
break;
//...
vector全局对象内存分配的问题
答案:2 悬赏:10 手机版
解决时间 2021-03-09 23:17
- 提问者网友:爱唱彩虹
- 2021-03-09 10:02
最佳答案
- 五星知识达人网友:猎心人
- 2021-03-09 11:33
一般性的做法 在 .h 文件中申明,而在 .cpp中定义 请尽量在.h中出现这种语句
vector<int>counts(0);//该语句为定义一个对象并调用重载的构造函数vector(int);
vector<int>counts(0);//该语句为定义一个对象并调用重载的构造函数vector(int);
全部回答
- 1楼网友:三千妖杀
- 2021-03-09 12:32
<
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯