【发布时间】:2015-05-25 12:02:38
【问题描述】:
在下面的代码中,我将 p 设置为 const,因为它在 Foo 的生命周期内永远不会指向任何其他 int。这不会编译,因为调用了 unique_ptr 的复制构造函数,这显然被删除了。除了使 p 非常量之外,还有其他解决方案吗?谢谢。
#include <memory>
using namespace std;
class Foo
{
public:
//x is a large struct in reality
Foo(const int* const x) : p(x) {};
Foo(Foo&& foo) : p(std::move(foo.p)) {};
private:
const unique_ptr<int> p;
};
【问题讨论】:
-
您究竟需要
const unique_ptr做什么?也许你想要一个shared_ptr代替? -
我不“需要”它,但我想指出 p 将在 Foo 的生命周期中指向同一个 int。
-
如果
p永远不会指向另一个int那么为什么要使用指针而不是普通成员? -
在我的实际代码中,“x”是一个大的 pod 结构。我宁愿传递一个指针而不是复制/移动它。
-
您可以将其设为 const 并且不允许 Foo 移动,或者将其设为非 const。对不起。
标签: c++ constants move unique-ptr move-constructor