Я пытаюсь инициализировать элемент объекта, который нельзя назначить или скопировать. Мне нужно сначала выполнить некоторые другие задачи, и инициализация зависит от них, поэтому я должен задержать его.Инициализация конца не скопируемого элемента
#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: 'СТД :: basic_ios> :: basic_ios (константные СТД :: basic_ios> &)': пытается ссылки удаленная функция
Если я правильно понимаю, где-то в этой строке происходит копия, что не допускается. Уникальные указатели не требуются. Я просто использую их, чтобы избежать другой ошибки (без инициализации по умолчанию), но я был бы рад принять предложения как с, так и без них.
'get_stdout' возвращает ссылку' pstream & 'на объект, принадлежащий 'child_'. Вы пытаетесь скопировать 'pstream', который не копируется. Вы можете хранить указатель (raw, non-owning) для него, я полагаю, или просто отбрасывать 'is' и использовать' child _-> get_stdout() 'по мере необходимости. –