构造函数这样写会不会产生问题?

C++语言 码拜 10年前 (2015-05-11) 1168次浏览 0个评论

CM::CM(void):
    proSem(new Sem()),
    comSem(new Sem()),
    {}

CM::~CM(){
 delete proSem;
 delete comSem;
}

其中,proSem和comSem为类Sem指针,是CM成员。
我在msdn上看到这么写,请问大神,这样会不会有问题?如果new失败呢?
是将proSem和comSem申明为对象好,还是保持指针申明方式?

10分
C++的哲学是不管new失败(会自动被底层异常处理)。
5分
首选用对象,有需求用指针的话可以用智能指针,尽量少用裸指针
5分
有强迫症的人会这样写

CM::~CM(){
 delete proSem;
 delete comSem;
proSem = NULL;
comSem = NULL:
}
5分
随便你怎么写, 符合你想要的逻辑就行。
初始化参数列表和在函数里赋值是一个样的, 除了具有常属性的变量以外。
new 失败了返回NULL
5分
引用 4 楼 a30037338 的回复:

随便你怎么写, 符合你想要的逻辑就行。
初始化参数列表和在函数里赋值是一个样的, 除了具有常属性的变量以外。
new 失败了返回NULL

返回NULL?这个有点想当然了吧?
默认是抛异常,除非显示要求不抛异常!

引用 5 楼 yangyunzhao 的回复:

返回NULL?这个有点想当然了吧?
默认是抛异常,除非显示要求不抛异常!

确实说的不合理, 不过vc6就是返回NULL

在使用指针成员的成员函数中和析构函数中,应该会写个条件判断是否是NULL,再考虑是否使用或释放该指针吧。。。个人愚见,说的不对勿喷啊。。。
引用 7 楼 guicaisa 的回复:

在使用指针成员的成员函数中和析构函数中,应该会写个条件判断是否是NULL,再考虑是否使用或释放该指针吧。。。个人愚见,说的不对勿喷啊。。。

这个可以有,但不是必要

引用 3 楼 yangyunzhao 的回复:

有强迫症的人会这样写

CM::~CM(){
 delete proSem;
 delete comSem;
proSem = NULL;
comSem = NULL:
}

这是个好写法

只有偏执狂才能生存。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明构造函数这样写会不会产生问题?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!