【发布时间】:2013-01-18 18:05:05
【问题描述】:
问题:我有一个带有两个构造函数的不可复制对象。我需要使用其中一个构造函数创建一个对象,然后在一些通用代码中使用它:-
使用可复制对象,它看起来像这样,而且很简单:
Object a;
if (condition)
a = Object(p1);
else
a = Object(p2,p3,p4);
a.doSomething();
但是,该对象是不可复制的,所以我不得不这样做:
boost::scoped_ptr<Object> a;
if (condition)
a = new Object(p1);
else
a = new Object(p2,p3,p4);
a->doSomething();
这感觉太复杂了。有没有更好的解决方案?
【问题讨论】:
-
你不是copying,你是assigning,所以严格来说,如果类是non-copyable,只要是可分配.
-
.. 虽然通常两者齐头并进。当然,你希望如此。
-
@juanchopanza:我很难考虑提供赋值运算符但不提供复制构造函数的理由。
-
答案是否定的。没有更好的解决方案。现在看看出现的无数答案实际上并没有回答问题。
-
可以选择 C++11 吗?如果是,物体是否可移动?
标签: c++ constructor