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. :)
|