| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 444 人关注过本帖
标题:【疑惑】C++句柄类(不同容器在不同系统下结果不同!)
只看楼主 加入收藏
点解咁问
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-10-30
结帖率:100%
收藏
 问题点数:0 回复次数:1 
【疑惑】C++句柄类(不同容器在不同系统下结果不同!)
程序代码:
#include<iostream>
#include<string>
#include<vector>
#include<list>
using namespace std;

class base_item
{
    public:
    virtual void print(){cout<<"This is base_item!"<<endl;}
    virtual base_item* clone(){return new base_item(*this);}
};

class inher_item1:public base_item
{
    public:
    void print(){cout<<"This is inher_item1!"<<endl;}
    inher_item1* clone(){return new inher_item1(*this);}
};

class inher_item2:public inher_item1
{
    public:
    void print(){cout<<"This is inher_item2!"<<endl;}
    inher_item2* clone(){return new inher_item2(*this);}
};

class handle
{
    private:
    base_item* pointer;
    public:
    handle():pointer(NULL){}
    handle(base_item* p_object):pointer(p_object){}
    ~handle(){delete pointer;}
    base_item* operator->(){return pointer;}
    base_item& operator*(){return *pointer;}
    handle& operator=(const handle& para){pointer=para.pointer;return *this;}
    handle(const handle& para){pointer=para.pointer;}
};



int main()
{
    base_item base_;
    inher_item1 inher_1;
    inher_item2 inher_2;

    handle handle_class1(base_.clone());
    handle handle_class2(inher_1.clone());
    handle handle_class3(inher_2.clone());

    vec<handle> vec_handle;
    vec_handle.push_back(handle_class1);
    vec_handle.push_back(handle_class2);
    vec_handle.push_back(handle_class3);
    vec<handle>::iterator ite_begin=vec_handle.begin();
    vec<handle>::iterator ite_end=vec_handle.end();
    for(;ite_begin!=ite_end;ite_begin++)
    {
        (*ite_begin)->print();
    }
    return 0;
}

c++ primer中有讲C++句柄类,于是我尝试模仿书本上的程序写了一小段程序!因为只是测试一下,所以我省略了对指针的管理!
但我尝试用vector容器来装句柄类的时候,如果通过迭代器来调用print()函数,在VS2008和mingw5下能编译通过,在windows下,出现不了结果,但出现下面的窗口
图片附件: 游客没有浏览图片的权限,请 登录注册

如果在linux下,在g++中同样可以通过,而运行的时候出现segmentation fault!
于是我换了list容器来装句柄类,同样通过迭代器来调用print(),同样在VS2008和mingw5下能编译通过,在windows下,可以出现结果,但系统同样会终止程序!
在linux下却可以正常运行!
我有怀疑handle类作为vector容器内元素的条件不足,但是我查了一下书,暂时了解到作为vector容器元素的约束条件只有1、必须是可以复制的 2、必须是支持赋值运算
但是handle类已经有复制构造函数和重载了赋值符号!究竟是哪方面的问题?

[ 本帖最后由 点解咁问 于 2011-12-28 20:14 编辑 ]
2011-12-28 20:12
点解咁问
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-10-30
收藏
得分:0 
2011-12-29 16:50
快速回复:【疑惑】C++句柄类(不同容器在不同系统下结果不同!)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018042 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved