我是C ++初学者,我正在用C ++编写类,并且正在使用void CScriptAccessible::InvokeInternal(ScriptFunction* scriptFunc, void** args)
{
// here I have to push params from **args** to stack
// and somehow call ScriptFunction::m_func
// In assembly I could see pushes to stack in a loop (driven by
// ScriptFunction::m_argCount). But I'm wondering, whether it's
// possible to do in C++ (push args on stack and call function by just address)
}
。
如何处理std::string
异常?
我可以这样做吗?
bad_alloc
或者我应该做
Temp::Temp(const string name) :
{
try {
name(name);
}
catch(std::bad_alloc& a) {
cout << "bad alloc error" << endl;
}
}
我想捕获异常,以便能够防止内存泄漏,然后可能再次抛出该异常。
另外,当我使用Temp::Temp(const string name) :
name(name)
{
catch(std::bad_alloc& a) {
cout << "bad alloc error" << endl;
}
}
中的x.assaing(y)
时,是否也需要检查std::string
异常吗? (如果我想处理内存泄漏。)
我正在寻找一种没有智能指针的方法(我们还没有学过)。
答案 0 :(得分:1)
通过member initializer list中的构造函数初始化类型std::string
的成员不会导致内存泄漏。
#include <string>
struct Temp
{
Temp (const std::string& name): name(name) {}
std::string name;
};
Temp t ("yourname");
std::cout << t.name; // yourname
更新:(由@Deduplicator建议)
如果仅使用一个ctor,则不妨使用std::string_view
,它是:
char
类对象的连续连续序列
赞:
#include <string_view>
struct Temp
{
Temp (std::string_view name): name(name) {}
std::string name;
};
Temp t ("yourname");
std::cout << t.name; // yourname
答案 1 :(得分:0)
如果字符串构造确实抛出bad_alloc,那么您几乎无能为力。您当然不应该将每个字符串构造都包装在try块中。取而代之的是,您应该允许异常上升到更高的层次,例如您的主函数,在其中捕获异常,以某种方式报告错误,并可能终止程序。通常,您希望以可以合理处理的最高级别捕获异常。