我必须分析这个涉及异常的C ++代码,但我不习惯分析应该做什么代码。关于它的一些事情我不明白。另外,我没有缓冲数据结构的经验或在C ++中抛出异常的高级细节。
数据结构的最大大小是多少?
构造函数可以在c ++中抛出异常吗?
我试过寻找这两个问题,但我真的很失落。感谢您抽出宝贵时间阅读。我尝试过搜索这两个问题,但我真的很失落。感谢您抽出宝贵时间阅读。
Seq_Buffer类及其构造函数的代码如下:
var count = await slides.length;
console.log("[DEBUG] found " + count + " elements");
for(var i = 0; i < count; i++)
{
var txtOfCurrElem = await slides.nth(i).innerText;
console.log("[DEBUG "+ i +"] Text: " + txtOfCurrElem);
}
答案 0 :(得分:1)
是的,我们可以从构造函数中抛出异常。这是处理构造函数失败或类初始化错误的最佳方法。参考此代码示例
class bar
{
public:
bar()
{
std::cout << "bar() called" << std::endl;
}
~bar()
{
std::cout << "~bar() called" << std::endl;
}
};
class foo
{
public:
foo()
: b(new bar())
{
std::cout << "foo() called" << std::endl;
throw "throw something";
}
~foo()
{
delete b;
std::cout << "~foo() called" << std::endl;
}
private:
bar *b;
};
int main(void)
{
try {
std::cout << "heap: new foo" << std::endl;
foo *f = new foo();
} catch (const char *e) {
std::cout << "heap exception: " << e << std::endl;
}
try {
std::cout << "stack: foo" << std::endl;
foo f;
} catch (const char *e) {
std::cout << "stack exception: " << e << std::endl;
}
return 0;
}
这里你从构造函数本身抛出异常。但是有些情况你在构造函数中分配内存(堆)。在这种情况下,在构造函数中抛出异常并没有多大用处,因为这会导致内存泄漏。因为如果类初始化失败,那么就没有为该类调用析构函数,因为已经抛出异常(假设在析构函数中使用free释放分配的内存)。所以在构造函数中抛出异常取决于场景或使用case.Not每种情况都不会在构造函数中抛出异常。