我有一个二进制搜索树,我使用模板向它添加任何类对象。
我有一个返回所述类对象的搜索函数或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?
注意:这是出于家庭作业的目的,泄漏记忆是我最后的关注点。简单和速度是我的第一个问题
答案 0 :(得分:2)
不,您无法将NULL
分配给对象。
Matrix mat; mat = NULL;
在您的情况下是非法的。如果您希望能够拥有NULL
,则可以使用指针(原始或智能)。
答案 1 :(得分:1)
要从函数返回对象,它必须具有可访问的副本或移动构造函数。它不需要赋值运算符;这只是作业的需要。当然,如果您将函数结果分配给先前声明的变量,则需要这样做。
请注意,如果您不自己进行delcare,则会自动生成公共复制构造函数和复制赋值运算符。
但是,如果您的对象正在管理在析构函数中释放的资源,那么您需要考虑Rule of Three。您应该实现或删除复制构造函数和赋值运算符;否则,很容易意外地引入内存泄漏,更糟糕的是,让两个对象都试图释放相同的资源。
要回答新问题,您不能返回空指针代替对象。您可以返回一个指针(指向树中包含的东西的原始指针,或者像std::unique_ptr<Type>
这样的智能指针到新分配的副本,以减少内存泄漏),或者是可以为空的对象类型,如{ {1}}。