由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - (面试题) 给code挑毛病(updated with multiple choices)
相关主题
question about const reference问个问题
0 < -1 ? A c++ questionoverriding operator<<
string operator +问个c++问题
面试问题member and friend
看道c++题: brianbench请问关于overloading <<
问个无厘头问题const in c++
c++ iterator 弱问is this behavior undefined?
how to change a variable's value in a const function有关objec access path的问题
相关话题的讨论汇总
话题: mextrainfo话题: extrainfo话题: inline话题: string
进入Programming版参与讨论
1 (共1页)
d*******n
发帖数: 369
1
1.
#include
class ExtraInfo
{
...
};
class ExtraInfoString : public std::string
{
ExtraInfo *mExtraInfo;
public:
inline ExtraInfoString() : mExtraInfo(new ExtraInfo())
{
}
inline ~ExtraInfoString()
{
delete mExtraInfo;
mExtraInfo = 0;
}
inline ExtraInfo *GetExtraInfo()
{
return mExtraInfo;
}
inline const ExtraInfo *GetExtraInfo() const
{
return mExtraInfo;
}
};
void main()
{
std::string *s = new E
k*****2
发帖数: 252
2
俺来抛块砖
D(A如果理解成这个类里的inline无法更改ctor和dtor,那个人感觉A也对)
D
C
???
z****e
发帖数: 2024
3
1.D std::string lack of virtual dtr
2.E make everything an object
3.C singleton
4.
SomethingExtraordinary() : mCacheValue(mValueMaker.GetValue()){}
int GetValue() const{
return mCacheValue;
}
z****e
发帖数: 2024
4
inline只是一个申请,具体inline与否,编译器说了算。

【在 k*****2 的大作中提到】
: 俺来抛块砖
: D(A如果理解成这个类里的inline无法更改ctor和dtor,那个人感觉A也对)
: D
: C
: ???

k*****2
发帖数: 252
5
第二个E也对,因为发生异常时临时变量自动被destroyed
第一个的A,我是觉得在class的declaration里直接给出了definition,那已经是
inline了,所以这种inline算是白加了

【在 z****e 的大作中提到】
: inline只是一个申请,具体inline与否,编译器说了算。
z****e
发帖数: 2024
6
for 2, i don't think D is correct.
you can get the handle by the member function.
it is not encapsulated at all.
waiting for more input from other guys.

【在 k*****2 的大作中提到】
: 第二个E也对,因为发生异常时临时变量自动被destroyed
: 第一个的A,我是觉得在class的declaration里直接给出了definition,那已经是
: inline了,所以这种inline算是白加了

z****e
发帖数: 2024
7
for E, there is no "临时变量" concept involved.
"临时变量" is either from passing a value to func or return, not related to
here at at all.

【在 k*****2 的大作中提到】
: 第二个E也对,因为发生异常时临时变量自动被destroyed
: 第一个的A,我是觉得在class的declaration里直接给出了definition,那已经是
: inline了,所以这种inline算是白加了

k*****2
发帖数: 252
8
赞严谨,说local objects就没歧义了

to

【在 z****e 的大作中提到】
: for E, there is no "临时变量" concept involved.
: "临时变量" is either from passing a value to func or return, not related to
: here at at all.

z****e
发帖数: 2024
9
hehe,茴香豆。

【在 k*****2 的大作中提到】
: 赞严谨,说local objects就没歧义了
:
: to

X****r
发帖数: 3557
10
For (1), strictly speaking, the behavior of the code is undefined,
although in practice leaking memory is most likely outcome.
See 5.3.5 [expr.delete]
3 In the first alternative (delete object), if the static type of the
operand is different from its dynamic type, the static type shall be a
base class of the operand's dynamic type and the static type shall
have a virtual destructor or the behavior is undefined.

【在 z****e 的大作中提到】
: 1.D std::string lack of virtual dtr
: 2.E make everything an object
: 3.C singleton
: 4.
: SomethingExtraordinary() : mCacheValue(mValueMaker.GetValue()){}
: int GetValue() const{
: return mCacheValue;
: }

相关主题
问个无厘头问题问个问题
c++ iterator 弱问overriding operator<<
how to change a variable's value in a const function问个c++问题
进入Programming版参与讨论
z****e
发帖数: 2024
11
virtual destructor?不需要吧?
如果ctr等等都是private了,就无法继承,就不需要virtual dtr了吧?
小的要挑战权威啦。哈哈。
也可能没有理解你的意思。
版主还是看看我那个heap和stack的帖子,你有没有教导。

【在 X****r 的大作中提到】
: For (1), strictly speaking, the behavior of the code is undefined,
: although in practice leaking memory is most likely outcome.
: See 5.3.5 [expr.delete]
: 3 In the first alternative (delete object), if the static type of the
: operand is different from its dynamic type, the static type shall be a
: base class of the operand's dynamic type and the static type shall
: have a virtual destructor or the behavior is undefined.

X****r
发帖数: 3557
12
我没有理解你的意思,所以不知道你有没有理解我的意思。
我说的是第一题里, std::string没有虚析构函数,所以delete s的时候,
严格地说是undefined behavior,虽然现实中往往就只是内存泄漏。

【在 z****e 的大作中提到】
: virtual destructor?不需要吧?
: 如果ctr等等都是private了,就无法继承,就不需要virtual dtr了吧?
: 小的要挑战权威啦。哈哈。
: 也可能没有理解你的意思。
: 版主还是看看我那个heap和stack的帖子,你有没有教导。

z****e
发帖数: 2024
13
我知道你知道我不知道。
我理解错了,我还以为你后面那个“3”是说第3题,我就说不需要vritual dtr,因为private ctr,都无法继承了。当时还想,怎么红猪侠说这个?
原来你是引用的标准。
唉,不好意思,又烦劳你打了一遍,算在我头上吧。

【在 X****r 的大作中提到】
: 我没有理解你的意思,所以不知道你有没有理解我的意思。
: 我说的是第一题里, std::string没有虚析构函数,所以delete s的时候,
: 严格地说是undefined behavior,虽然现实中往往就只是内存泄漏。

d*******n
发帖数: 369
14
第四题没人搞清楚吗?我觉的是B.不过不清楚是不是efficient.还有第三题,那个
singleton是不是thread safe的?我觉得不是,要是在mTheClass == 0的时候,多个
threads同时new它,不就虾米了?
X****r
发帖数: 3557
15
第四题是B,这个明显是考mutable这个关键字的。
一般来说题目没提到多线程的话就不需要考虑多线程的情况。

【在 d*******n 的大作中提到】
: 第四题没人搞清楚吗?我觉的是B.不过不清楚是不是efficient.还有第三题,那个
: singleton是不是thread safe的?我觉得不是,要是在mTheClass == 0的时候,多个
: threads同时new它,不就虾米了?

d*******n
发帖数: 369
16
1. 第四题为什么说它不efficient呢?
2. 关于多线程,我只是想多思考一下。It's thread-unsafe, 你说我说的对不对?

【在 X****r 的大作中提到】
: 第四题是B,这个明显是考mutable这个关键字的。
: 一般来说题目没提到多线程的话就不需要考虑多线程的情况。

X****r
发帖数: 3557
17
1.如果声明mCacheValue为mutable的话GetValue() const里也可以写
mCacheValue了,就避免重复计算。
2.对。

【在 d*******n 的大作中提到】
: 1. 第四题为什么说它不efficient呢?
: 2. 关于多线程,我只是想多思考一下。It's thread-unsafe, 你说我说的对不对?

1 (共1页)
进入Programming版参与讨论
相关主题
有关objec access path的问题看道c++题: brianbench
C++ 的 问题问个无厘头问题
[合集] 请问-fno-implicit-templates的用处c++ iterator 弱问
不用头文件,如何调用函数?C++how to change a variable's value in a const function
question about const reference问个问题
0 < -1 ? A c++ questionoverriding operator<<
string operator +问个c++问题
面试问题member and friend
相关话题的讨论汇总
话题: mextrainfo话题: extrainfo话题: inline话题: string