重载副本分配运算符

吉姆

我最近一直在学习重载运算符,并很快来到重载复制运算符。我尝试了一些示例,但无法真正理解其格式及其功能。好吧,如果您可以用更简单的术语向我解释代码,这将很有帮助,因为因为我是C ++的初学者。无论如何,这是我的代码:

#include <iostream>
using namespace std;

class Point{
private:
    int* lobster;
public:
    Point(const int somelobster){
        lobster = new int;
        *lobster = somelobster;
    }
    //deep copy 
    Point(const Point& cpy){ //copy of somelobster(just to make sure that it does not do shallow copy)
        lobster = new int;
        *lobster = *cpy.lobster;
    }
    //assingment operator
    Point& operator=(const Point& cpy){ //used to copy value
        lobster = new int; //same thing as the original overloaded constructor
        *lobster = *cpy.lobster; //making sure that it does not makes a shallow copy when assigning value
        return *this;
    }

    void display_ma_lobster(){ //display nunber
        cout << "The number you stored is: " << *lobster << endl;
    }
    ~Point(){ //deallocating memory
        cout << "Deallocating memory" << endl;
        delete lobster;
    }
};

int main(){
    Point pnt(125);
    cout << "pnt: ";
    pnt.display_ma_lobster();
    cout << "assigning pnt value to tnp" << endl;
    Point tnp(225);
    tnp = pnt;
    tnp.display_ma_lobster();
    return 0;
}

但是真正需要解释的主要部分是:

//deep copy 
        Point(const Point& cpy){ //copy of somelobster(just to make sure that it does not do shallow copy)
            lobster = new int;
            *lobster = *cpy.lobster;
        }
        //assingment operator
        Point& operator=(const Point& cpy){ //used to copy value
            lobster = new int; //same thing as the original overloaded constructor
            *lobster = *cpy.lobster; //making sure that it does not makes a shallow copy when assigning value
            return *this;
        }

感谢您的时间

土豆泥

副本分配运算符可以使用对象已拥有的现有资源。它不像构造函数。(您的副本构造函数是正确的。)

//assingment operator
Point& operator=(const Point& cpy){ //used to copy value
    // Do not allocate anything here.
    // If you were to allocate something, that would require deallocating yer shit too.

    *crap = *cpy.crap; //making sure that it does not makes a shallow copy when assigning value
    return *this;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++从重载的副本分配运算符中调用默认的副本分配运算符

来自分类Dev

非类型模板结构的成员结构的重载副本分配运算符

来自分类Dev

重载的运算符=返回void是否不可能是副本分配运算符?

来自分类Dev

副本分配运算符何时调用?

来自分类Dev

模板化副本分配运算符

来自分类Dev

分配运算符重载

来自分类Dev

模板中定义的副本分配运算符被编译器删除

来自分类Dev

有没有正当理由不从副本分配运算符返回* this?

来自分类Dev

为什么我的副本分配运算符从未调用过?

来自分类Dev

删除副本分配运算符的VS 2015 Update 3错误

来自分类Dev

如何避免副本分配运算符出现双重释放或损坏(快捷方式)?

来自分类Dev

为什么std :: reference_wrapper显式定义副本分配运算符?

来自分类Dev

如何在副本分配运算符中访问私有变量?

来自分类Dev

模板类分配运算符重载

来自分类Dev

为什么引用类型成员导致隐式声明的副本分配运算符被删除

来自分类Dev

重载<<运算符

来自分类Dev

重载<<运算符

来自分类Dev

重载'-'运算符

来自分类Dev

*运算符重载

来自分类Dev

()运算符重载

来自分类Dev

运算符重载

来自分类Dev

()运算符重载

来自分类Dev

运算符<<重载

来自分类Dev

重载 >> 运算符

来自分类Dev

运算符重载-重载*

来自分类Dev

用于Char分配的重载运算符[]-C ++

来自分类Dev

避免numpy为重载运算符分配操作

来自分类Dev

运算符重载-动态对象分配问题

来自分类Dev

“ Shader”类中的重载分配运算符