关于重载“=”,如果我可以避免它

时间:2012-06-14 10:03:38

标签: c++ operator-overloading

我有一个二进制搜索树,我使用模板向它添加任何类对象。

我有一个返回所述类对象的搜索函数或NULL

我是否需要重载“=”才能返回此对象?我希望如果我返回它会知道要检查的对象:如果相同的类型将存储在LHS中的值替换为存储在RHS中的值,并且如果NULL将第一个对象标记为NULL。

我的错误是否可能在其他地方(我返回的是完整对象或NULL,没有别的)或者我实际上是否需要重载它?

我的时间有限(非常)所以如果需要我怎么能这样做?它是一个快速的过程还是会涉及很多修改。

很抱歉没有代码,但我想不出任何相关的内容。

编辑我也使用了很多NULL,所以我可以将NULL返回到对象中吗?示例:

class Matrix {
   private:
     int col;
     int line;
     int value;
}

Matrix mat; mat = NULL;

一些代码:

template <typename Type>
Type BST<Type>::search(int key) {
    if (this->root == NULL)
        return NULL;
    else
        return root->search(key);

此处类型为矩阵。我可以返回NULL或继续搜索并返回Type,这也是Matrix?

注意:这是出于家庭作业的目的,泄漏记忆是我最后的关注点。简单和速度是我的第一个问题

2 个答案:

答案 0 :(得分:2)

不,您无法将NULL分配给对象。

Matrix mat; mat = NULL;

在您的情况下是非法的。如果您希望能够拥有NULL,则可以使用指针(原始或智能)。

答案 1 :(得分:1)

要从函数返回对象,它必须具有可访问的副本或移动构造函数。它不需要赋值运算符;这只是作业的需要。当然,如果您将函数结果分配给先前声明的变量,则需要这样做。

请注意,如果您不自己进行delcare,则会自动生成公共复制构造函数和复制赋值运算符。

但是,如果您的对象正在管理在析构函数中释放的资源,那么您需要考虑Rule of Three。您应该实现或删除复制构造函数和赋值运算符;否则,很容易意外地引入内存泄漏,更糟糕的是,让两个对象都试图释放相同的资源。

要回答新问题,您不能返回空指针代替对象。您可以返回一个指针(指向树中包含的东西的原始指针,或者像std::unique_ptr<Type>这样的智能指针到新分配的副本,以减少内存泄漏),或者是可以为空的对象类型,如{ {1}}。