我正在编写一个小型库,它可以在输入参数超出范围时执行一些可能会抛出异常的事情.看起来很简单,我会抛出一个std :: out_of_range.
我还想生成一个很好的消息,例如"你给了我X但Y是范围内的最大值" - 即我正在格式化一个字符串并希望将其用于异常.
奇怪的是构造函数的签名是
explicit out_of_range (const string& what_arg)
也就是说,它需要对字符串进行const引用.当我们弹出函数时,我在堆栈上创建的任何字符串都将被销毁,从而为异常的捕获者留下一堆垃圾.所以我只有几个选择:
我倾向于3是最不重要的,可以说是比直接使用标准类更好的设计,但我不得不问:是否真的没有办法直接使用标准的out_of_range类生成的字符串?我错过了什么吗?
该异常将保存您传入的字符串的副本,而不仅仅是引用.您可以在本地安全地创建字符串并将其传递给异常的构造函数,而不必担心生命周期问题.
请注意,字符串通过引用传递的事实不会抑制在构造函数内部复制的可能性,这似乎让您感到困惑.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |