0

我有一个二叉搜索树,我使用模板向其中添加任何类对象。

我有一个返回所述类对象或 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?

注意:这是出于家庭作业目的,泄漏内存是我最后关心的问题。到目前为止,简单和速度是我的第一个问题

4

2 回答 2

2

不,您不能分配NULL给对象。

Matrix mat; mat = NULL;

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

于 2012-06-14T10:09:02.327 回答
1

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

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

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

要回答新问题,您不能返回空指针来代替对象。您可以返回一个指针(可以是指向树中包含的内容的原始指针,也可以是指向std::unique_ptr<Type>新分配副本的智能指针,以降低内存泄漏的可能性),或者可以为空的对象类型,例如boost::optional<Type>.

于 2012-06-14T10:08:01.003 回答