1
我想阻止这样的代码:从预防的unique_ptr分配到shared_ptr
unique_ptr<ClassA> captr = unique_ptr<ClassA>(new ClassA());
....
shared_ptr<Base> sptr = move(captr);
此代码应生成编译器错误,而是它编译并在运行时产生双重释放并其他奇怪的错误。为shared_ptr指定unique_ptr根本没有意义。如果声明了unique_ptr,它并不意味着被共享。但是,如果允许将unique_ptr分配给shared_ptr,则此限制将消失。
不幸的是,当某些函数返回unique_ptr并且某些函数将shared_ptr作为参数时,这个错误太容易发生了。
问题是:我如何禁止unique_ptr和shared_ptr的所有模板变体的这些赋值,而不管它们被模板化为什么特定的类?
我在想像是声明一个赋值操作符被删除,但我不确定这样的声明是什么样的。
-1“将shared_ptr指定给shared_ptr毫无意义。”是不正确的。问题出在你的课堂'A'上。你忘了表明这一点。 – 2013-03-17 05:45:05
这并不是因为如果我将某些东西声明为“独特”,那么有人不能将它分享。这个不成立。一个独特的指针应该是唯一的,即全球任何时候都只有一个实例。 – mkschreder 2013-03-17 05:48:37
@ user1953157:他们不能“只是让它共享”,他们必须拥有所有权,然后明确地输出“移动”。如果你不想失去某些东西的所有权,请不要移动它!考虑到需要做特殊的工作来允许这个('shared_ptr'有一个构造函数),你认为这是一个错误? – GManNickG 2013-03-17 05:59:02