Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新构造函数引发异常后的对象指针状态-C++; 当一个新的类构造函数在C++中抛出异常时,对象指针的状态是什么?以以下代码为例: CMyClass * pobjMyClass = (CMyClass *)0xA5A5A5A5; try { pobjMyClass = new CMyClass(); // Exception thrown in constructor } catch ( ... ) {}_C++_Visual Studio 2008_Exception_Constructor - Fatal编程技术网

新构造函数引发异常后的对象指针状态-C++; 当一个新的类构造函数在C++中抛出异常时,对象指针的状态是什么?以以下代码为例: CMyClass * pobjMyClass = (CMyClass *)0xA5A5A5A5; try { pobjMyClass = new CMyClass(); // Exception thrown in constructor } catch ( ... ) {}

新构造函数引发异常后的对象指针状态-C++; 当一个新的类构造函数在C++中抛出异常时,对象指针的状态是什么?以以下代码为例: CMyClass * pobjMyClass = (CMyClass *)0xA5A5A5A5; try { pobjMyClass = new CMyClass(); // Exception thrown in constructor } catch ( ... ) {},c++,visual-studio-2008,exception,constructor,C++,Visual Studio 2008,Exception,Constructor,当此代码执行时,抛出异常后,pobjMyClass的值是多少?指向CMyClass、0xa5a5、NULL、某个随机未初始化值或其他内容的无效实例的指针?谢谢。由于异常是在赋值发生之前抛出的,所以pobjMyClass将是以前的任何类型-在您的例子中是0xA5A5。您肯定已经尝试过了吗?@TonyK,尝试一下只能提供一半的答案-它在编译器上的工作方式。了解它的通用性通常很有用。C++充满了陷阱,谨慎是很好的。即使如此,马克——吉姆肯定已经尝试过了吗?发生了什么事?+1删除我的答案,因为你实际上首

当此代码执行时,抛出异常后,
pobjMyClass
的值是多少?指向
CMyClass
0xa5a5
NULL
、某个随机未初始化值或其他内容的无效实例的指针?谢谢。

由于异常是在赋值发生之前抛出的,所以pobjMyClass将是以前的任何类型-在您的例子中是0xA5A5。

您肯定已经尝试过了吗?@TonyK,尝试一下只能提供一半的答案-它在编译器上的工作方式。了解它的通用性通常很有用。C++充满了陷阱,谨慎是很好的。即使如此,马克——吉姆肯定已经尝试过了吗?发生了什么事?+1删除我的答案,因为你实际上首先得到了正确的答案:)好吧,从技术上讲,我发布一个新的答案有点愚蠢,即使你的答案在评论中被注释了,并且在编辑后很好。但是谢谢:)更确切地说,构造函数的出口处有一个序列点,这意味着赋值的副作用在构造函数返回之前不会发生。由于构造函数不返回,赋值就永远不会发生。我很确定这在任何可简化的异常实现中都是正确的。然而,编写依赖于这种行为的代码会有点俗气。@T.E.D.:标准保证了这种行为。这没什么不体面的。