У меня есть структура с указателем в качестве члена:
struct MyStruct {
char *ptr;
}
Я хочу инициализировать ptr в области видимости, а затем иметь возможность использовать его за пределами этой области:
{ // scope 0
{ //scope 1
{ // scope 2
mystruct.ptr = new char[100];
}
// mystruct.ptr still lives here
}
// i dont need mystruct anymore
delete[] mystruct.ptr;
}
Но потом мне придется удалить его позже, что чревато ошибками, и я бы предпочел избежать этого. Я решил использовать std::shared_ptr
.
{ // scope 0
{ //scope 1
{ // scope 2
auto a = std::make_shared<char>(new char[100]);
mystruct.ptr = a.get(); // ??????? HOW TO ASSIGN
}
// mystruct.ptr still SHOULD live here
}
}
Итак, как я мог это сделать? Как мне назначить shared_ptr для mystruct.ptr, чтобы счетчик владения стал равным 2? Я вижу, что get () не работает, потому что он просто передает указатель, но не передает права собственности, поэтому он удаляется.
Как видите, основная мотивация здесь - продлить жизнь, поэтому я открыт для других практик. Может, я ошибаюсь, думая об использовании здесь shared_ptr?
mystruct.ptr
, сделав его общим указателем (или уникальным указателем, если вам специально не нужно разделять владение). Вот как работают общие указатели. Невозможно получить семантику автоматического владения из необработанного указателя. - person Mike Seymour   schedule 20.05.2015mystruct
в интеллектуальном указателе с помощью специального средства удаления для освобождения массива символов? - person StoryTeller - Unslander Monica   schedule 20.05.2015