gpt4 book ai didi

c++ - 自动指针问题

转载 作者:行者123 更新时间:2023-11-30 02:05:27 24 4
gpt4 key购买 nike

我是 C++ 的新手,对 auto_ptr 有点困惑。

我有一个类,里面有一个静态 auto_ptr。

static std::auto_ptr<MyCompany::CConnection> con = std::auto_ptr<MyCompany::CConnection> (util::getDBConnection() );

Util::getDBConnection() 实现:

CConnection* util::getDBConnection(){
try
{
cout<< &MyCompany::GetFermatConnection();
return &MyCompany::GetFermatConnection();
}
catch(...)
{
//connect to local DB
throw;
}
}

但是,当我的程序完成时,在自动指针的析构函数期间,它总是在内存中遇到异常。

~auto_ptr()
{ // destroy the object
if (_Myptr != 0)
delete _Myptr; // exception in this line.
}

异常是“TestDLL.exe 中 0x00000001800024e8 处的未处理异常:0xC0000005:访问冲突读取位置 0xffffffffffffffff。”

我知道 auto_ptr 会在到达其范围末尾时尝试释放任何内存。但是,在这种情况下,我不知道出了什么问题。有谁知道可能的原因是什么?

最佳答案

虽然您已经展示了 util::getDBConnection 的实现,但它并没有真正回答问题,即它返回的最终是否是一个用 new 分配的指针

如果是,那么当您尝试删除该指针时会出现一条错误消息,表明您的堆可能已损坏(很可能在一些完全不相关的代码中)。

如果它返回的东西不是用 new 分配的,那么问题就更简单了——因为 auto_ptr 在指针,它只能与用 new 分配的东西一起使用。在以任何其他方式分配的指针上使用它会产生 UB。

关于c++ - 自动指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9562735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com