Мне интересно, разумны ли интеллектуальные указатели на статические объекты. Например, допустим, у меня есть некоторый статический ресурс и вы хотите передать ссылку на этот статический ресурс на некоторые другие объекты, которым нужен этот ресурс для работы.Хорошо ли shared_ptr на статических объектах?
Один из способов - использовать RAW-указатели, указывающие на этот ресурс. Но теперь мне интересно, эффективны ли интеллектуальные указатели (shared_ptr), и если да, то как это сделать правильно. (должен ли интеллектуальный указатель быть также статическим?).
Вопрос вопроса: если больше объектов с интеллектуальным указателем больше нет, то статический объект, на который указывает умный указатель, будет освобожден (что не является лучшей идеей ...).
Один пример (который заканчивается в аварии в конце выполнения):
struct SomeType {
SomeType() { cout << "ctor..." << endl; }
~SomeType() { cout << "dtor..." << endl; }
void sayHello() { cout << "Hello!" << endl; }
};
void someFunction(shared_ptr<SomeType> smartPointer) {
smartPointer->sayHello();
}
static SomeType st;
static shared_ptr<SomeType> pt{ &st };
void anotherFunction() {
someFunction(pt);
}
int main() {
anotherFunction();
cin.get();
}
Там нет необходимости в shared_ptr здесь вообще. – SergeyA
умные указатели предназначены для лучшего управления * динамическими * сроками службы. Статические переменные уже имеют * статическое * время жизни. – jaggedSpire
«Один из способов - использовать RAW-указатели, указывающие на этот ресурс». Очевидная вещь - использовать ссылку на ресурс. Почему ты не хочешь этого делать? –