我使用luabind作为我的lua到C++包装器.Luabind提供了一种方法来使用我自己的回调函数来处理lua,set_pcall_callback()抛出的异常.所以,我借从文档为例,变革中的logger->日志()函数,并把该函数在一个名为"引擎"类,所以代替它是一个常规的全局函数它是现在是一个成员函数,这是我的问题似乎在哪里.
以下是相关的代码剪辑:
class Engine //Whole class not shown for brevity
{
public:
Engine();
~Engine();
void Run();
int pcall_log(lua_State*);
private:
ILogger *logger;
};
Engine::Run()
{
lua_State* L = lua_open();
luaL_openlibs(L);
open(L);
luabind::set_pcall_callback(&Engine::pcall_log); //<--- Problem line
//etc...rest of the code not shown for brevity
}
int Engine::pcall_log(lua_State *L)
{
lua_Debug d;
lua_getstack( L,1,&d);
lua_getinfo( L, "Sln", &d);
lua_pop(L, 1);
stringstream ss;
ss.clear();
ss.str("");
ss << d.short_src;
ss << ": ";
ss << d.currentline;
ss << ": ";
if ( d.name != 0) …Run Code Online (Sandbox Code Playgroud) 当我将一个对象作为const引用传递给另一个对象时,是否有副本?我总是假设,因为我通过引用传递了对象,成员对象本身实际上是我传入的对象而不是副本.我做了一个测试程序,导致传入的引用对象在范围的末尾被销毁,但它没有像我预期的那样崩溃.这是一个等待发生的错误还是被复制的对象?
#include <iostream>
#include <string>
class Something
{
public:
Something(const std::string& str) : mStr(str) {}
const std::string& str() const
{
return mStr;
}
private:
std::string mStr;
};
int main()
{
Something* something;
{
std::string temp = "Testing.";
something = new Something(temp);
}
std::cout<<something->str()<<"\n";
delete something;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该std :: string是否仍然有效或被删除?(在对象本身)