【发布时间】:2017-06-04 17:25:29
【问题描述】:
我想知道静态对象上的智能指针是否合理。例如,假设我有一些静态资源,并且想将对该静态资源的引用传递给需要这些资源才能使用的其他对象。
一种方法是使用指向该资源的 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。
-
智能指针用于更好地管理 动态 生命周期。静态变量已经有一个 static 生命周期。
-
“一种方法是使用指向该资源的 RAW 指针” 显而易见的做法是使用对资源的引用。你为什么不想这样做?
-
@Andreas:“我只需要一个指向具有 IDoSomething 接口的对象的指针”听起来你已经知道答案了。
-
@Chris 不,你没有。您可以从自动对象构造
shared_ptr。你只需要让删除器正确,就像让它什么都不做。
标签: c++ c++11 pointers static smart-pointers