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; : }
|
|
|
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, 你说我说的对不对?
|