【发布时间】:2015-10-16 23:42:22
【问题描述】:
我正在尝试初始化一个无法分配或复制的对象成员。我需要先执行一些其他任务,并且初始化依赖于它,所以我必须延迟它。
#include <boost/process.hpp>
class A{
std::unique_ptr<boost::process::child> child_;
std::unique_ptr<boost::process::pistream> is;
A(std::string exec, boost::process::context process_context){
// Stuff that needs to be done first
// ...
child_ = std::make_unique<boost::process::child>(start_child(exec, process_context));
is = std::make_unique<boost::process::pistream>(child_->get_stdout()); // <- error
}
boost::process::child start_child(std::string exec, boost::process::context process_context);
};
我从中得到的错误是:
错误 C2280: 'std::basic_ios>::basic_ios(const std::basic_ios> &)' : 试图 引用已删除的函数
如果我理解正确,则该行的某处正在发生副本,这是不允许的。 不需要唯一指针。我只是用它们来避免另一个错误(没有默认初始化),但我很乐意接受有或没有它们的建议。
【问题讨论】:
-
get_stdout返回一个pstream&对child_拥有的对象的引用。您正在尝试复制不可复制的pstream。我想你可以存储一个(原始的、非拥有的)指针,或者只是删除is并根据需要使用child_->get_stdout()。