gpt4 book ai didi

c++ - C++中抛出异常的两种方法(不使用堆)

转载 作者:行者123 更新时间:2023-11-28 03:03:48 26 4
gpt4 key购买 nike

我自己做了MatrixArithmeticException其构造函数采用 int指定犯了哪种类型的错误。我在我的代码中尝试了两种抛出异常的方法。这是两种方式:

  1. 创建 MatrixArithmeticException 的实例并抛出实例。
  2. throw MatrixArithmeticException(0); //or whatever the int is supposed to be

无论哪种方式,代码都有效,但我的问题是,哪种方式更有效(就空间而言)?另外,为什么第二种方式似乎同样有效?

编辑:根据我收到的关于这个问题的几个答案(以及对其中一个答案的评论),我应该为第一种方式提供我的代码。

我从来没有以任何一种方式使用过动态内存(我试图用问题的标题来暗示这一点,但这显然是不够的)。至于第一种方法的代码,我是这样做的:

MatrixArithmeticException dimensionsDoNotMatch(0);
throw dimensionsDoNotMatch;

我想这个问题是基于堆栈的 C++ 等同于问某人这两者之间的区别:

MatrixAritmeticException dimensionsDoNotMatch = new MatrixArithmeticException(0);
throw dimensionsDoNotMatch;

还有这个:

throw new MatrixArithmeticException(0);

这两个问题似乎有一个共同的答案。 std::cout << "Thanks, guys!!" << std::endl;

最佳答案

第一种方法是显式创建一个本地对象作为左值(您可以获取其地址),然后将其抛出。

第二种方法是创建一个临时对象(右值)并将其抛出 - 然而,抛出通常涉及复制 - 如果它不被删除或移动。

第二个可能更有效,因为它可以在没有您的干预或提示的情况下省略和/或移动。

此外,一个小的“注释”——使用 int 来表示所犯的错误是你可能希望避免做的事情,即使我看不到你到底在做什么;试试枚举吧!

关于c++ - C++中抛出异常的两种方法(不使用堆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com