C++ 重载 = 运算符

标签 c++ oop visual-c++

重载 = 运算符时,应该使一个对象的内容等于另一个对象的内容,还是使对象的指针指向同一对象?

回顾这个问题,似乎应该复制内容而不是指针。但我就是想不通,所以如果有人能解释我应该做什么,我将不胜感激,我知道如何做,我只是不确定该选择哪一个。

class IntObject
{
private:
    int *pi_One;

public:

    IntObject(void);

    IntObject::IntObject(int const &i_one);

    ~IntObject(void);

    IntObject & operator=(const IntObject&);

};

IntObject::IntObject()
{
    pi_One = new int(0); 
}

IntObject::IntObject(int const &i_one)
{
    pi_One = new int(i_one); 
}

IntObject::~IntObject(void)
{
    delete pi_One;
}

IntObject & IntObject::operator=(const IntObject& c) {
//This copies the pointer to the ints
    this->pi_One = c.pi_One;

    return *this;  
}

最佳答案

这取决于您希望在您的类型中具有什么样的语义。如果你想要值语义,那么复制内容(深拷贝,如 std::vector 中的情况),如果你想要引用语义(浅拷贝,如 std::shared_ptr )

关于C++ 重载 = 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11763554/

相关文章:

javascript - 从变量创建新的 javascript 对象

c++ - 最好的免费/付费 C++ 视频培训资源是什么?

C++ lambda 两次复制构造函数调用

c++ - 在以下情况下手动调用析构函数是否是一个糟糕的设计决策?

c++ - llvm clang struct 动态创建函数

c++ - 枚举元素定义?

c++ - "invalid conversion from ' const char *' to ' char' [-fpermissive] 的问题”

c# - 我可以找出我正在使用的方法的名称吗?

c++ - 如何使用两个预编译头文件。一种用于托管代码,另一种用于非托管代码。 xxx.pch 不是有效的预编译头文件

c++ - 如何使用 LibTIFF 在多页上写入图 block