У меня есть вектор объектов. Каждый объект имеет boost::shared_ptr
не подлежащему копированию объекту (boost::signal
). конструктор по умолчанию объекта создает объект boost :: signal.Как изменить размер std :: vector с уникальными объектами
struct FuncRef
{
typedef boost::signal0<void, > Func;
boost::shared_ptr <Func> function;
FuncRef():
function(new Func)
{
}
};
Чтобы установить мой вектор содержит X отдельные объекты, я сделал это: -
vec.resize(X);
Это не делать то, что я ожидал, потому что он использует конструктор по умолчанию, чтобы сделать один объект, и затем конструктор копирования, чтобы сделать дубликаты. Я в конечном итоге с X объектов, но все они указывают на тот же объект boost::signal0
.
Есть ли более простой способ построения моего вектора правильно, чем просто использовать push_back
в цикле for
?
Вы можете сделать свой класс наследованием 'boost :: noncopyable' для обнаружения таких ошибок во время компиляции. –
@Bjorn - класс должен быть скопирован, так как он находится в векторе. Вот почему я должен использовать shared_ptr. Проблема в том, что он использует копирование, когда я этого не ожидал ... – Roddy
Правильно, о чем я думал? –