由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - C++面试问题,高人请进啊~~~
相关主题
c++ class default functions?One C++ question
发发面经 攒人品 C++的面经: bloomberg 电面
C++ online Test 一题C++ Q65: recompiling (IB)
新Qualcomm面经C++相关的面经
包子呼唤大牛--问关于C++Destructor的问题 (转载)小公司web server面经
问个C++重新编译的问题准备去BB onsite 了,求bless (undate)
请教1个工作面试题说说我被面试到的c++题目吧
为什么C++的constructor出错可以抛出异常,而destructor出错BB phone interview question
相关话题的讨论汇总
话题: printer话题: operator话题: c++话题: con
进入JobHunting版参与讨论
1 (共1页)
P***y
发帖数: 2885
1
问在堆上分配内存的问题。问详细过程,小弟一问三不知。只知道用new operator.有个
问题是如果Constructor失败怎么办,会不会有内存泄漏什么的。后来才知道调用new在
堆上分配的时候,先调用operator new去拿到一块raw memory,然后在此内存上调用Con
structor,但问题是这个时候Constructor throw exception,然后就Fail了。。。。
问题就在这儿,由于前面用operator new分配了一块的raw memory,这时候有没有内存泄
漏???
回来以后自己找了个程序来调试,故意让它Constructor不成功。。。但是依然没有看出
那块事先分配的raw memory是怎样回收回去的。。。
各位有空的话帮我看看,我把我自己的源程序给贴上来。。。
#include "stdafx.h"
#include
using namespace std;
///// class Counted
template
class Counted {
public:
clas
B*****t
发帖数: 335
2
Printer* Printer::makePrinter() {
Printer* pPrinter = NULL;
try {
pPrinter = new Printer;
} //编译器在这里加入了汇编代码。当Printer的构造函数或者Printer父类的构造
函数Throw Exception时,会自动跳到这里这些执行这些代码,然后根据分配给Printer
在堆上内存的地址,回收这些内存, 对pPrinter的赋值不会被执行,调用析构函数也不
会被调用。
...
}

有个
Con
存泄
看出

【在 P***y 的大作中提到】
: 问在堆上分配内存的问题。问详细过程,小弟一问三不知。只知道用new operator.有个
: 问题是如果Constructor失败怎么办,会不会有内存泄漏什么的。后来才知道调用new在
: 堆上分配的时候,先调用operator new去拿到一块raw memory,然后在此内存上调用Con
: structor,但问题是这个时候Constructor throw exception,然后就Fail了。。。。
: 问题就在这儿,由于前面用operator new分配了一块的raw memory,这时候有没有内存泄
: 漏???
: 回来以后自己找了个程序来调试,故意让它Constructor不成功。。。但是依然没有看出
: 那块事先分配的raw memory是怎样回收回去的。。。
: 各位有空的话帮我看看,我把我自己的源程序给贴上来。。。
: #include "stdafx.h"

s******s
发帖数: 3694
3
呵呵, 你很有钻研精神 :)
你可以看一下 C++ F&A Lites, 里面对于 Constructor and Destructor 失败如何处
理有比
较详细的描述。
面试这种问题感觉才是有点意思, -:)

有个
Con
存泄
看出

【在 P***y 的大作中提到】
: 问在堆上分配内存的问题。问详细过程,小弟一问三不知。只知道用new operator.有个
: 问题是如果Constructor失败怎么办,会不会有内存泄漏什么的。后来才知道调用new在
: 堆上分配的时候,先调用operator new去拿到一块raw memory,然后在此内存上调用Con
: structor,但问题是这个时候Constructor throw exception,然后就Fail了。。。。
: 问题就在这儿,由于前面用operator new分配了一块的raw memory,这时候有没有内存泄
: 漏???
: 回来以后自己找了个程序来调试,故意让它Constructor不成功。。。但是依然没有看出
: 那块事先分配的raw memory是怎样回收回去的。。。
: 各位有空的话帮我看看,我把我自己的源程序给贴上来。。。
: #include "stdafx.h"

m******9
发帖数: 968
4
C++ FAQ里面讲到了这部分,如果我没记错的话,constructor出错不会产生泄漏,
但是destructor出错就有问题了
x***y
发帖数: 633
5
You can have a look at effective C++ about placement new and delete, in
which it says that the runtime system will call the operator delete
corresponding to the operator new if an exception arises in the coupled
construtor call...So, no memory leak will be caused.

有个
Con
存泄
看出

【在 P***y 的大作中提到】
: 问在堆上分配内存的问题。问详细过程,小弟一问三不知。只知道用new operator.有个
: 问题是如果Constructor失败怎么办,会不会有内存泄漏什么的。后来才知道调用new在
: 堆上分配的时候,先调用operator new去拿到一块raw memory,然后在此内存上调用Con
: structor,但问题是这个时候Constructor throw exception,然后就Fail了。。。。
: 问题就在这儿,由于前面用operator new分配了一块的raw memory,这时候有没有内存泄
: 漏???
: 回来以后自己找了个程序来调试,故意让它Constructor不成功。。。但是依然没有看出
: 那块事先分配的raw memory是怎样回收回去的。。。
: 各位有空的话帮我看看,我把我自己的源程序给贴上来。。。
: #include "stdafx.h"

v****s
发帖数: 1112
6
正解!

Printer

【在 B*****t 的大作中提到】
: Printer* Printer::makePrinter() {
: Printer* pPrinter = NULL;
: try {
: pPrinter = new Printer;
: } //编译器在这里加入了汇编代码。当Printer的构造函数或者Printer父类的构造
: 函数Throw Exception时,会自动跳到这里这些执行这些代码,然后根据分配给Printer
: 在堆上内存的地址,回收这些内存, 对pPrinter的赋值不会被执行,调用析构函数也不
: 会被调用。
: ...
: }

1 (共1页)
进入JobHunting版参与讨论
相关主题
BB phone interview question包子呼唤大牛--问关于C++Destructor的问题 (转载)
bloomberg非典型面试问个C++重新编译的问题
问个C++ ctor的问题请教1个工作面试题
c++ vs Java virtual 实现(Y家)为什么C++的constructor出错可以抛出异常,而destructor出错
c++ class default functions?One C++ question
发发面经 攒人品 C++的面经: bloomberg 电面
C++ online Test 一题C++ Q65: recompiling (IB)
新Qualcomm面经C++相关的面经
相关话题的讨论汇总
话题: printer话题: operator话题: c++话题: con