读书人

关于容器中包含类和容器中是否有指针的

发布时间: 2012-05-09 12:13:59 作者: rapoo

关于容器中包含类和容器中是否有指针的问题
问题1:容器的名字,(标号)cb_v是不是地址,或者能不能代表地址,它是不是有一个指向其元素的指针。
问题2:用obb给对象oba赋值时,是不是把obb的副本赋值到oba中。(标号)ca_v是不是也有一个指向其第一个元素的指针。
问题3:以下容器中是不是含有指针,含有那些指针,越具体越好。
问题4:容器分配与撤销时,所要做的工作有那些?

C/C++ code
#include <iostream>#include <vector>using namespace std;class cb{public:    vector<int> cb_v;};class ca{public:    vector<class cb> ca_v;};int main(){    class cb obb;        class ca oba;    cout << " 为赋值之前的大小:obb 大小" << sizeof(obb) << endl;    cout << "oba的大小:"  << sizeof(oba) << endl;    vector<int> vb_temp;    for(int i = 0; i < 10; i++)    {        vb_temp.push_back(i);        obb.pb_v = vb_temp;        cout << &obb.pb_v << " " << &obb.pb_v[0] <<endl;    }    cout << " boa.ca_v[i] ";    for(int i = 0; i < 100; i++)    {        oba.ca_v.push_back(obb);        cout <<&oba.ca_v<< " " << &oba.ca_v[0] << " "<< &oba.ca_v[0].pb_v[0] <<endl;    }    cout << " 为赋值之后的大小:obb 大小" << sizeof(obb) << endl;    cout << "oba的大小:"  << sizeof(oba) << endl;        return 0;}


[解决办法]
cb_v不是地址,但能取到地址。它是一个容器的对象。
第二个问题是:所有的容器中存放的都是副本。
vector中含有指针,主要是指向存放数据的。
容器分配就是申请内存,初始化。撤销就是释放内存吧。

[解决办法]
变量是个悲剧的概念.忘掉他吧..
3,你可以看看vector的库,看有哪些ptr后缀 或者*. 这个跟实现有关的..
4.容器一般先 获得一段堆空间, 调用构造函数,初始化.
最后习惯,然后释放空间..

某种意义上来说,容器和普通的类没啥区别."分配撤销"和普通的类都差不多的.

[解决办法]
探讨

释放空间时,是自己写析构函数,还是系统自动提供的析构函数引用:
变量是个悲剧的概念.忘掉他吧..
3,你可以看看vector的库,看有哪些ptr后缀 或者*. 这个跟实现有关的..
4.容器一般先 获得一段堆空间, 调用构造函数,初始化.
最后习惯,然后释放空间..

某种意义上来说,容器和普通的类没啥区别."分配撤销"和普通的类都差不多的.

[解决办法]
2.是拷贝了副本到vector中, vector中有的版本,比如sgi stl这个版本,有指向第一个元素的指针。

4. 容器分配的时候,内存,然后调用拷贝构造函数复制到vector中。撤销嘛,自然析构,然后释放内存。


析构函数是调用元素的析构函数,如果是int doulbe 这些内置类型,是不会析构的,

因为不需要。。。存储对象,那么是需要调用对象的析构函数
[解决办法]
自己啊

读书人网 >C++

热点推荐