【发布时间】:2014-12-03 17:45:09
【问题描述】:
我正在实现一个智能指针类。
我已经定义了一个赋值运算符重载,它采用同一类的另一个实例。现在我想定义这个运算符的重载,它接受任何指针。所以我应该可以做smartPointer = &someObject;或smartPointer = NULL;之类的事情。
我该怎么做呢?我应该传入void* 吗?还有什么?
作为一个更普遍的问题(我知道这很少需要):什么样的参数告诉编译器可以传入任何指针?
【问题讨论】:
-
在实践中,您可能不希望这样。因为这意味着您可以轻松地做到
smartPointer1 = rawPointer; smartPointer2 = rawPointer;- 现在,谁删除了记忆? -
您可以使用模板方法:
template <typename T> MySmartPointer& MySmartPointer::operator =(T* p); -
@Jarod42 我想过,但我认为这不是我想要的,因为这意味着如果客户端执行
smart_pointer = raw_pointer,则传入的参数将是指向该指针的指针。我错了吗? -
@AvivCohn:要获得指向指针的指针,客户端将使用
smart_pointer = &raw_pointer。 -
@Jarod42 等一下:
(T* p)的意思是“T必须是指针类型”吗?
标签: c++ pointers assignment-operator