静态函数的共享指针

问题描述 投票:0回答:1

我正在尝试使用智能指针来改进我的编码,并且目前正在尝试使用智能指针替换我们遗留代码库中的所有旧原始指针(

std::unique_ptr
std::shared_ptr
)。我现在遇到一个从静态函数返回指针的情况。

如果我将其更改为使用

std::shared_ptr
创建并从函数返回的
std::make_shared
会发生什么?在我看来,它不会被清理,直到程序退出,而不是之前,即使静态函数内存在唯一的活引用?

上一篇:

static MyObject* MyClass::createPointer()
{
    return new MyObject();
}

现在:

static std::shared_ptr<MyObject> MyClass::createSharedPointer()
{
    return std::make_shared<MyObject>();
}
c++ smart-pointers
1个回答
1
投票

在旧代码中,以下情况会出现内存泄漏:

static MyObject* myFunction::createPointer()
{
    return new MyObject(); /* <—- memory leak */
}

你最终会

delete
你创造的
MyObject
吗?如果程序结束而你没有结束,就会出现内存泄漏。它不是一个
static
变量,而是一个
dynamic
变量,因此您需要负责
delete
ing。

在我看来,直到程序退出才会被清理

在旧代码中,甚至不会被清理,除非你自己清理。

在新代码中:

static std::shared_ptr<MyObject> myFunction::createSharedPointer()
{
    return std::make_shared<MyObject>();
}

智能指针将为您处理

delete
ion,因此这是安全的。

既然您没有使用

static
变量,为什么要首先声明函数
static

© www.soinside.com 2019 - 2024. All rights reserved.