c++ - 如何使这个运算符(operator)调用明确?

标签 c++ pointers operator-overloading smart-pointers implicit-conversion

我正在写一个智能指针作为我的学校作业,但我遇到了一个问题。需要在我的智能指针和原始指针之间进行转换,因此我通过将运算符重载到我的智能指针类中来实现它,如下所示:

operator T*() {
    return raw_pointer;
}

另一个要求是实现 == 运算符,它应该在智能指针之间以及智能指针和原始指针之间工作。 我是这样实现的,这个重载也可以在我的智能指针类中找到:

bool operator== (const smart_pointer<T> &smart_pointer) {
    return raw_pointer == smart_pointer.raw_pointer;
}

现在,当我尝试做这样的事情时:

smart_pointer<obj> sp = new obj();
obj *p = new obj();
if(sp == p) {
    // do something
else {
    // do something else
}

我收到以下错误消息:

ambiguous overload for 'operator=='
candidates are:
operator==(obj*, obj*) <built-in>
bool smart_pointer<T>::operator==(const smart_pointer<T>&) [with T = obj]

我猜它不知道它是否应该使用内置的并将我的智能指针转换为原始指针,或者它是否应该使用我重载 == 运算符的方法。问题是我目前想不出任何办法来解决这种情况。提前致谢!

最佳答案

原始指针和智能指针之间的隐式转换有点危险,这就是标准智能指针不提供它们的原因。如果您根本没有它们,那将是最好的。

也就是说,这可能不是您的选择。您的实际问题的解决方案是简单地添加更多等于运算符的重载,以便在智能指针和原始指针之间进行混合比较。那些将优先于那些需要双向转换的人。

关于c++ - 如何使这个运算符(operator)调用明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33457711/

相关文章:

c++ - 如何模拟 malloc 以在 GMOCK 中返回 null?

c++ - 将 c++ int 转换为 VARBINARY 并再次返回

c++ - 通过引用传递与通过 shared_ptr 传递

c# - 带有指针的不安全 C# 代码片段

C - 将结构设置为 null(赋值中的类型不兼容)

c++ - 如何声明QPoint(x,y)

c - 从链表中删除某些数字(递归)

c++ - C++中的运算符函数以及与之相关的编译错误

c++ - 无法重载 + 运算符来添加 2 个对象

c++ - 模板运算符 << 重载和 make_pair