由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一下,exception时,destructor一定会被调用么?
相关主题
请问C++ exception后如何清理function stack上的内存资源?一道编程题 - throw Exceptions
几个问题why do we still use dynamic allocation?
请教个Bloomberg 的 C++ 题目c++ question
一个 default constructor 的问题what is the difference?
What does the default constructor do?关于内存泄漏
C++ 的 exception handling有大侠讲讲RTTI和exception的问题么?
一个c++ constructor的问题, thanksTwo questions about handling exceptions in C++
请问delete的问题[C++] when destructors get called
相关话题的讨论汇总
话题: double话题: new话题: delete话题: exception话题: destructor
进入Programming版参与讨论
1 (共1页)
N**D
发帖数: 2885
1
以前俺以稳定第一的原则,一直用vector来作dynamic array.现在用户过多,对程序速
度要求很高,想用下面的class改写,但担心会有memory leak, 请指点下,或有更好方
案没有?谢谢
class A {
public:
int _size;
double* a;
double* b;
double* c;
A(int i){
a = new double [i+1];
b = new double [i+1];
c = new double [i+1];
_size = i+1;
};
~A() {
delete [] a;
delete [] b;
delete [] c;
};
};
n****g
发帖数: 150
2
要overload new吧,支持C++标准的编译器好像可以throw badalloc;
t****t
发帖数: 6806
3
why not write
a=new double [3*(i+1)];
b=a+(i+1);
c=b+(i+1);
if new fails, it fails and throw bad_alloc. there is no partial allocation.
of course, if it is more complex than this, you'd better process bad_alloc
yourself.

【在 N**D 的大作中提到】
: 以前俺以稳定第一的原则,一直用vector来作dynamic array.现在用户过多,对程序速
: 度要求很高,想用下面的class改写,但担心会有memory leak, 请指点下,或有更好方
: 案没有?谢谢
: class A {
: public:
: int _size;
: double* a;
: double* b;
: double* c;
: A(int i){

n****g
发帖数: 150
4
that's a great idea!

【在 t****t 的大作中提到】
: why not write
: a=new double [3*(i+1)];
: b=a+(i+1);
: c=b+(i+1);
: if new fails, it fails and throw bad_alloc. there is no partial allocation.
: of course, if it is more complex than this, you'd better process bad_alloc
: yourself.

m******n
发帖数: 155
5
为什么用new会提高速度?因为vector会call constructor吗?
想知道对于int, float这样的POD来说用new比vector会快多少?

【在 t****t 的大作中提到】
: why not write
: a=new double [3*(i+1)];
: b=a+(i+1);
: c=b+(i+1);
: if new fails, it fails and throw bad_alloc. there is no partial allocation.
: of course, if it is more complex than this, you'd better process bad_alloc
: yourself.

g*****y
发帖数: 7271
6
这位同学还是要好好注意一下,这么简单的一个类,就有两个明显的问题:
1. 在一个function里有多个可能fail的操作(e.g., new in your constructor),要
注意resource leak 或者 object 状态是否保持valid,如果真的有failure的话。
2. 多次分配内存是比较耗时的操作,thrust给了一个建议,一举解决了这个问题以及
前一个问题。还是要多向高手学习,hehe

【在 N**D 的大作中提到】
: 以前俺以稳定第一的原则,一直用vector来作dynamic array.现在用户过多,对程序速
: 度要求很高,想用下面的class改写,但担心会有memory leak, 请指点下,或有更好方
: 案没有?谢谢
: class A {
: public:
: int _size;
: double* a;
: double* b;
: double* c;
: A(int i){

C*******l
发帖数: 105
7
new also call constructor.

【在 m******n 的大作中提到】
: 为什么用new会提高速度?因为vector会call constructor吗?
: 想知道对于int, float这样的POD来说用new比vector会快多少?

m******n
发帖数: 155
8
对啊,所以我就更搞不懂了。
为什么new会比用vector快呢?

【在 C*******l 的大作中提到】
: new also call constructor.
c****e
发帖数: 1453
9
use new (std:nothrow). It's safe and easier to check the NULL pointer
instead of handling the exception.
C*******l
发帖数: 105
10
psychologically, new is faster. :)

【在 m******n 的大作中提到】
: 对啊,所以我就更搞不懂了。
: 为什么new会比用vector快呢?

C*******l
发帖数: 105
11
Actually, vectors reqire some more pointers, which may slow down the
performance a little.

【在 C*******l 的大作中提到】
: psychologically, new is faster. :)
1 (共1页)
进入Programming版参与讨论
相关主题
[C++] when destructors get calledWhat does the default constructor do?
弱问一下C++ 的 exception handling
关于C/C++里的Static variable的memory allocation/initializa一个c++ constructor的问题, thanks
[合集] C++ interview question help请问delete的问题
请问C++ exception后如何清理function stack上的内存资源?一道编程题 - throw Exceptions
几个问题why do we still use dynamic allocation?
请教个Bloomberg 的 C++ 题目c++ question
一个 default constructor 的问题what is the difference?
相关话题的讨论汇总
话题: double话题: new话题: delete话题: exception话题: destructor