首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

值型类,赋值操作符的有关问题

2013-07-04 
值型类,赋值操作符的问题类定义见如下代码。其中赋值操作符的定义,方案(1)和(2)哪个正确,为什么?class HasP

值型类,赋值操作符的问题
类定义见如下代码。其中赋值操作符的定义,方案(1)和(2)哪个正确,为什么?

class HasPtr
{
public:
HasPtr( const int &p, int i ): ptr( new int( p ) ), val( i ) { }
HasPtr( const HasPtr &obj ): ptr( new int( *obj.ptr ) ), val( obj.val ) { }
HasPtr& operator = ( const HasPtr &obj )
{
//ptr = new int( *obj.ptr );    // 方案(1)
*ptr = *obj.ptr;              // 方案(2)
val = obj.val;
return *this;
}
~HasPtr()
{
delete ptr;
}
int get_ptr_val() const
{
return *ptr;
}
void set_ptr_val( int p ) const
{
*ptr = p;
}
private:
int *ptr;
int val;
};


主函数:
int main()
{
int obj = 0;
 HasPtr ptr1( obj, 42 );
HasPtr ptr2 = ptr1;      // 两种方案都不报错。
          ptr1 = ptr2;             // 两种方案都不报错。
ptr1.set_ptr_val( 44 );
cout << ptr2.get_ptr_val() << endl;

return 0;
}
类 值型类?赋值操作符
[解决办法]
引用:
   void set_ptr_val( int p ) const
    {
        *ptr = p;
    }

你类设计的就有问题,这里ptr指向了一个形参?虚吊指针啊。。
好吧,我看错了。。。方案(2)
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

   void set_ptr_val( int p ) const
    {
        *ptr = p;
    }

你类设计的就有问题,这里ptr指向了一个形参?虚吊指针啊。。
好吧,我看错了。。。方案(2)

对于方案(2),一般情况没问题,但对于一个对象,声明和赋值初始化一起的话,我就不理解了,并没有给指针分配空间,就直接赋值?比如这个:HasPtr ptr2 = ptr1;


HasPtr ptr2 = ptr1;并不会调用赋值操作符,而是会调用拷贝构造函数,也就是HasPtr( const HasPtr &obj ): ptr( new int( *obj.ptr ) ), val( obj.val ) { }

方案一有内存泄露。

热点排行