boost::shared_ptr 课结束时出错
boost::shared_ptr error at end of class
class SomeData{};
typedef boost::shared_ptr<SomeData> data_ptr;
class ABC {
public: ABC(){}
~ABC(){cached_ptr.reset(); }
data_ptr get_ptr() {data_ptr x; return x;} // it does work and returns a data_ptr
bool someWork(data_ptr& passed_ptr) {
if(cached_ptr == NULL) {
cached_ptr = get_ptr();
passed_ptr.reset(new SomeData(*cached_ptr));
}
return true;
}
data_ptr otherWork() {
if(cached_ptr == NULL) {
cached_ptr = get_ptr();
data_ptr local_ptr = boost::make_shared<SomeData>(*cached_ptr);
}
return data_ptr; // after some more work
}
private: data_ptr cached_ptr; // class member
};
以上是我正在尝试工作的一些代码的简化。
在我添加"cached_ptr"之前,它确实能够在连续调用之间缓存数据以避免每次调用get_ptr(((它可能相当大(。
注意:我有 boost::make_shared 和 reset(( - 我尝试了两者,看看错误是否是由副本引起的。它没有产生任何影响(正如预期的那样(。
我已经有了谷歌测试单元测试 - 当我添加cached_ptr时,谷歌测试一直给我"GTEST_HAS_SEH"类型的错误。
"unknown file: error: SEH exception with code 0xc000005 thrown in the test body."
析构函数上发生错误:cached_ptr.reset()
;
视觉工作室 说:
"First-chance exception at 0x00ceba41 in myFile_gtest.exe: 0xC0000005:
Access violation reading location 0xfeeefeee."
它也没有发生(最初我什至没有放置 reset((,我认为共享指针在超出范围时会杀死自己。
我的问题可能是什么?
提升 1.47
谢谢。
typedef boost::shared_ptr<SomeData> data_ptr;
data_ptr get_ptr() { data_ptr x; return x; }
cached_ptr = get_ptr();
passed_ptr.reset(new SomeData(*cached_ptr));
get_ptr()
返回了一个NULL
指针,然后您取消引用了它。
您从未将cached_ptr
设置为除NULL
以外的任何内容,但这是一个单独的问题。
在以下片段中取消引用空指针 (*cached_ptr(:
cached_ptr = get_ptr();
passed_ptr.reset(new SomeData(*cached_ptr));
因此,您的程序将变得格式不正确。在这种情况下,您无法执行任何期望。
正如 Andy Prowl 注意到的那样(在我的问题的评论中(,指针指向的类不包含复制构造函数。
boost::make_shared 需要一个复制构造函数才能制作副本...
在没有它的情况下,它指向相同的数据,因此当原始指针超出范围时,缓存的指针会丢失其点(尽管在调试时,它看起来仍然有它......
为 SomeData
添加复制构造函数解决了这个问题。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 为什么在这个代码结束循环中没有得到结束
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 试图对缓存进行跨步测试,但程序并没有结束
- 用pybind11包装C++抽象类时出错
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 降雨程序结束时出错
- boost::shared_ptr 课结束时出错