作者adrianshum (Alien)
看板C_and_CPP
标题Re: [问题] vector初始化的问题
时间Tue Feb 3 11:04:54 2009
※ 引述《realmojo (蟹老板)》之铭言:
: #include <vector>
: #include <iostream>
: using namespace std;
: class Bin;
: vector<Bin> *v;
: struct Bin {
: int *glass;
: Bin():glass(new int(0)) {}
: };
: int main() {
: v = new vector<Bin>(2);
: *(v->at(0).glass) = 9;
: cout << *(v->at(1).glass) << endl;
: }
: 为什麽output会是9而不是0?
顺便一提, 你这里的用法有很多看起怪怪的地方
比如, 一般 int, double 这类东西绝少要这样
allocate from heap.
当然, 你 new 了也没有相对应的 delete, 没有
正确的 copy ctor 和 assignment operator 也是
问题.
通常这类 class 会直接写
struct Bin {
int glass;
Bin():glass(0){}
};
就够了 (impl 其实分开写更好)
vector 也是, 这里也看不出有什麽需要
new vector<Bin>(2);
直接在main 里面
vector<Bin> v(2);
不就好了? 用起来也更简单:
v[0].glass = 9;
或 v.at(0).glass = 9;
这都比你现在的写法易读太多了 (也更少问题).
alien
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82
1F:推 chrisdar:我测试他的Code时还需要把Visual Leak Detector关掉才行 02/03 11:08
2F:推 realmojo:我的code是从一个完整的code发现bug,慢慢debug,删除後 02/03 11:20
3F:→ realmojo:变成最精简的程式才po上来问的,不是原先就这麽写的 02/03 11:21
4F:→ realmojo:不过还是感谢,我本身的确没有delete的习惯 02/03 11:22
5F:→ adrianshum:delete 这种已经不可以用 "习惯" 来带过了. 这是非做不 02/03 11:45
6F:→ adrianshum:可的东西了啦... 02/03 11:45
7F:推 StubbornLin:我在po程式问问题时也会把程式简化再贴 02/03 13:46
8F:→ StubbornLin:毕竟问题只在一个范围内 常常在简化的过程中 02/03 13:46
9F:→ StubbornLin:就自己找到问题在哪里 02/03 13:46
10F:→ james732:会简化贴 +1 02/03 13:48