我测试shared_ptr和lambda deleter如下代码。 它工作正常。但在调试时,显示:
RTTI symbol not found for class 'std::_Sp_counted_deleter<cls*, main::{lambda(cls*)#1}, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>'
我的代码有什么问题吗?
代码:
#include <iostream>
#include <memory>
using namespace std;
class cls{
public:
void test(){
cout << "ok\n";
}
virtual ~cls(){
cout << "~cls()\n";
}
};
typedef shared_ptr<cls> stptr;
int main(){
auto del = [](cls* p){delete(p);};
stptr p = stptr(new cls, del);
p->test();
return 0;
}
屏幕截图:
答案 0 :(得分:0)
代码看起来不错。
我遇到了与GDB(使用GCC编译时QtCreator中的默认调试器)相同的问题。我认为这是GDB的一个问题,当它寻找涉及lambda的类型的RTTI时。 使用Clang和LLDB(如果系统上安装了Clang,则提供“套件”)我没有看到这个问题。