vector容器初始化类变量咋整啊?

老曹 2012-06-29 11:13:08

class CA
{
private:
int mCnt=0;
public:
CA(int newCnt)
{
mCnt = newCnt;
}

~CA()
{
mCnt =0;
}

int GetCount()
{
return mCnt;
}
}

vector <CA> myVector;//声明个类容器,供全局调用

void InitVector(int k)//初始化类容器
{
for(int i=0; i<k; i++)
{
CA a(i);
myVector.push_back(a);
}
} //函数完毕后,a会调用析构函数,mCnt被置为0;myVector存放的类的mCnt也给析构了,但是不想让他被析构掉。

main()
{
InitVector(10);

for(int i=0; i<myVector.size(); i++)
{
myVector[i].GetCount(); //此处得到的mCnt都是0;但是想得到1,2,3,。。。10
}
}

问题:全局变量myVector怎么初始化好,难道加入的成员也必须是全局变量吗?高人快来吧!
...全文
293 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
冻结 2012-06-29
  • 打赏
  • 举报
回复

#include <iostream>
#include <vector>

class CA {

public:
CA(int newCnt) : mCnt(newCnt) {
}

~CA() {
mCnt = 0;
}

int GetCount() {
return mCnt;
}

private:
int mCnt;
};

void InitVector(std::vector<CA>& vec, int k) {
for(int i = 0; i < k; i++) {
CA a(i);
vec.push_back(a);
}
}

int main() {
std::vector<CA> myVector;
InitVector(myVector, 10);
for(size_t i=0; i < myVector.size(); i++) {
std::cout << myVector[i].GetCount() << " ";
}
std::cout << std::endl;
}


结果:0 1 2 3 4 5 6 7 8 9
给楼主调代码,还挺累的。
艳琦罗生 2012-06-29
  • 打赏
  • 举报
回复

vector <int> myVector;

void InitVector(int k,vector <int>& v)
{
for (int i = 0; i < k; i++) {
v.push_back(i);
}
return;
}

int main()
{
InitVector(10,myVector);
for (int i = 0; i < myVector.size(); i++) {
cout<< myVector[i]<<endl;
}
}
pathuang68 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
class CA
{
private:
int mCnt=0;
public:
CA(int newCnt)
{
mCnt = newCnt;
}

~CA()
{
mCnt =0;
}

int GetCount()
{
return mCnt;
}
}

vector <CA> myVector;//声明个类容器,供全局调用

void InitV……
问题:全局变量myVector怎么初始化好,难道加入的成员也必须是全局变量吗?高人快来吧!
[/Quote]

当然不是。加入的成员必须要是全局变量。
qixing1115 2012-06-29
  • 打赏
  • 举报
回复
void InitVector(int k)//初始化类容器
{
for(int i=0; i<k; i++)
{
CA a(i);
myVector.push_back(a);
}
} //函数完毕后,a会调用析构函数,mCnt被置为0;myVector存放的类的mCnt也给析构了,但是不想让他被析构掉。
CA a(i);在main里定义,用传参方式传入InitVector再初始化就可以了.
这样:InitVector(int k,CA a)
geansea 2012-06-29
  • 打赏
  • 举报
回复
a的析构不会影响容器吧,我记得是拷贝构造啊
zdleek 2012-06-29
  • 打赏
  • 举报
回复
vector <CA> myVector;//
楼主直接存CA对象到容器中,原则上,CA类应该定义一个拷贝构造函数
老曹 2012-06-29
  • 打赏
  • 举报
回复
多谢楼上几位的回复。
小弟疏忽,经过五楼的演算,不存在mCnt被析构的问题。
其实原本的问题没有mCnt的数据存储,只是有个网络操作,在构造函数中打开网路,在析构函数中关闭网路。
我在构建vector容器后,发现发送数据总是出错,跟踪一下原来网路已经关闭了。也就是临时变量的析构影响了容器中的
数据,所以我就以为所有数据都会受到析构的影响。最后只好把析构函数中的关闭网络函数给去掉了,但这样会不会造成内存的泄露呢?

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧