C++ передает право собственности составному классуC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ передает право собственности составному классу

Сообщение Anonymous »

У меня есть объект (назовем его A), в котором я хочу сохранить другой объект (скажем, он имеет тип B и называется m), который будет передан из функция, которая создает A. Создание B выполняется другой функцией, которую я не контролирую.

Код: Выделить всё

class A
{
public:
A(B& m)
{
this->m = m
}

private:
B& m;
};

//

void SomeLongLivedClass::someFunction()
{
B m = createB();
A a = new A{ m }

// m goes out of scope
}
Когда область действия someFunction() заканчивается, m уничтожается, а ссылка в A становится висячей. Я могу получить правильный B только через createB(), который является частью dll, к которой у меня нет доступа. Как я могу сделать m значением l и передать право собственности A?
Я решил создать B вне A, чтобы уменьшить беспорядок в A, но, может быть, это в корне неправильный способ? Я немного читал о композиции и агрегации - неправильно ли делать композицию, помещая объекты в такой класс?
Я думал о передаче m как std::unique_ptr< B>, но я не могу понять, выйдет ли m из области видимости или нет, и вместо этого оставить указатель висеть.
Само собой разумеется что это всего лишь псевдокод и реальная ситуация сложнее. Создание B немного сложнее, поэтому я хотел сделать это вне A.

Подробнее здесь: https://stackoverflow.com/questions/791 ... site-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»