【发布时间】:2014-06-14 10:38:35
【问题描述】:
我见过一些智能指针以两种方式实现operator=:
A) 一个将原始指针分配给另一个原始指针:
SmartPointer& operator=(const SmartPointer& rhs)
{
delete m_ptr;
m_ptr = rhs.m_ptr;
return *this;
}
B) 并且在赋值后使右侧指针无效:
SmartPointer& operator=(SmartPointer& rhs)
{
delete m_ptr;
m_ptr = rhs.m_ptr;
rhs.m_ptr = nullptr
return *this;
}
我的问题是更建议使用哪一个?我对 B) 的问题是,如果想进一步操作第二个智能指针(见下面的代码),程序会崩溃(如果不检查空指针)或什么也不做。这似乎不太好:)
SmartPointer<MyClass> p1(new MyClass());
SmartPointer<MyClass> p2(new MyClass());
p1 = p2;
p2->someMethod(); // <----- BOOM!
【问题讨论】:
-
智能指针有几种风格。例如。
unique_ptr,weak_pointershared_ptr。你指的是哪一个? -
第二个类似于
auto_ptr,已被弃用。并且不要在没有充分理由的情况下重新实施它们。 (你的处理不了p1 = p1) -
@EdHeal 我对智能指针的了解非常有限,现在正在谷歌搜索和“stackoverflowing”以了解它们是如何实现的。将查找您提到的类型:)
-
@BryanChen 所以我猜 B) 是不可能的 :)
-
如果你这样做
p1 = p1两个版本都会做错事。
标签: c++ operator-overloading smart-pointers