| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 688 人关注过本帖
标题:关于复制控制
取消只看楼主 加入收藏
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
结帖率:92.86%
收藏
 问题点数:0 回复次数:5 
关于复制控制
程序代码:
class U_ptr
{
    friend class Hasptr;
    int*ip;
    size_t use;
    
    U_ptr(int * p):ip(p),use(1){}
    ~U_ptr(void){ delete ip;}
};
class U_ptr;

class Hasptr
{
public:
    //constructor
    Hasptr(int* p,int i):ptr(new U_ptr(p),val(0){}     //1.智能指针的计数类使用,只是在复制和赋值时起作用啊,如果不通过复制和赋值,只是通过定义时传的指针p值相同,那这个计数器没变,仍能产生悬垂指针的危险啊
    //copy
    Hasptr(const Hasptr& p):ptr(p.ptr),val(p.val){++ptr->use;}
    //assignment operator
    Hasptr& operator=(const Hasptr&);
    //destructor  
    ~Hasptr(void)
    {
        if(--ptr->use==0)
            delete ptr;
    }
    //get element
    int* get_ptr(){  return ptr->ip;}
    int get_int(){   return val;}
    // change the appropriate data nember
    void set_ptr(int * p){ ptr->ip=p; }   //2.这里修改了ip,那use不应该改一下吗?应该和其他ip值相同的其他ptr的use保持一致吗?同时原ip的ptr的use不应该减一吗?
    void set_int(int i){val=i;}
    //return or change the value pointed to 
    int get_ptr_val()const {return *ptr->ip;}
    void set_ptr_val(int i){ *ptr->ip=i;

private:
    U_ptr* ptr;
    int val;
}

3.书上说没使用计数时,析构函数用来删除指针成员,那撤销一个Hasptr时会删除其指针对象,其他由该对象复制创建的对象的指针成员将无法使用,因为  指针成员所指的对象已被撤销。
是不是这个意思:      不加析构函数时,编译器会调用一个合成析构函数,该合成的函数只会把指针所用的空间释放,而其所指对象的空间没有被释放;自己加的析构函数应为:~Hasptr(void)
    {
        
            delete ptr;
    }
而用delete时就把指针所指对象的空间也释放了?
“析构函数撤销复合类型”的复合类型是指?
4.a复制构造函数,b析构函数,c定义赋值操作符,三者只要有一个没定义,则如由对象Hasptr  A复制赋值而来的对像B,会在A被删除后,其基础的int对象无法访问,且没被撤销
按照2.的说法我能理解没有b会这样,可没a,b怎么也这样?
程序代码:
class TreeNode{
public:
   TreeNode():count(0){}
   TreeNode(const TreeNode&);
   ~TreeNode();
private:
   string value;
    int count;
    TreeNode l;
   TreeNode r;
}
   

5.上面是书上的一个例子,为什么operator=的定义?
谢谢
搜索更多相关主题的帖子: 复制 
2012-08-23 18:00
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
此外,生成时出现如图error不知怎么回事?
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-08-23 18:06
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
哎。。什么啊,今天说std出问题的次数好多啊?为什么
2012-08-23 19:46
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
回复 5楼 lz1091914999
有c 语言基础,真是在看C++ Primer。。。。我问的问题都是看书时想的。。现在到了后几章,觉的真的深奥了许多。。。有偏差的话,应该是我的问题。。不是书,
2012-08-25 17:12
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
回复 6楼 pangding
呵呵呵,没办法。。。随便看看,脑子里就有疑问。。。还要多些大家帮忙了。。。
2012-08-25 17:15
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
回复 9楼 BianChengNan
真的是书上的。。。。
2012-08-27 22:45
快速回复:关于复制控制
数据加载中...
 
   



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

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