avatar
m*o
1
上一期的极速前进是每期必看啊,这一期尝试看了两次,但是看不下去了,觉得完全没有上一季的精彩,当然这跟制作组没有关系,明星的选择上面大不如以前了,所以水准也就降低了。
首先,我最想吐槽的就是吴昕了,本来快乐大本营对她无感,也不讨厌,因为她在里面真的有点路人的感觉,后来莫名其妙和李易峰炒起了CP,刷了不少好感,也挨了很多骂,但是我还是觉得就一般吧,不反感也不喜欢。但是看了极速之后觉得她怎么什么都不会,一直拖累韩庚后腿,有的时候韩庚都已经对她无语了。所以,真人秀不是什么人都能上的,既然你是宅女,就安静地当宅女,干嘛要来受这个风吹雨打的苦啊,我觉得替她接下这个工作的人也是不长脑子,明显招黑啊。上季中难道没有看到那个娇滴滴的所谓的宅男女神被喷的很厉害吗?
其实这种没有计划地参加综艺节目只会毁了明星得观众缘,为了长期发展,何必要为了增加曝光率去受这个折腾呢?没有情商和毅力的人还是安安静啊地捧着原来的饭碗吧。
avatar
T*c
2
avatar
q*x
3
foo.h
class A {
// copy ctor and assignment disabled
};
class B {
// copy ctor and assignment disabled
};
class C {
// copy ctor and assignment disabled
};
bar.h
#include "foo.h"
class D {
public:
void bar {
for (auto it : pack_map_) {
// do sth
}
}
~D() {
for (auto it : pack_map_) {
it.second.Clear();
}
}
private:
struct Pack {
A* a;
B* b;
C* c;
void Clear() {
delete c; delele b; delete a;
}
};
map pack_map_;
};
这里Pack::Clear()相当于dtor,类似Init()和ctor的关系。之所以定义Clear()而不是
dtor,是希望copy ctor, assignment, dtor保持相同语义。pack相当于一个三元tuple。
有更好设计么?foo.h不能更改。因A,B,C均不可复制,无法在Pack里用uniq_ptr
avatar
q*x
4
std::tuple<>也不太好。

【在 q****x 的大作中提到】
: foo.h
: class A {
: // copy ctor and assignment disabled
: };
: class B {
: // copy ctor and assignment disabled
: };
: class C {
: // copy ctor and assignment disabled
: };

avatar
N*K
7
Pack copy ctor 你没定义吧

【在 q****x 的大作中提到】
: method bar要遍历map:
: for (auto it : pack_map_) {
: }
: 这里pair会调用Pack的copy ctor

avatar
q*x
8
default by compiler ah.
即使自己定义,也得用到A/B/C的copy ctor,但已经被禁用了。

【在 N******K 的大作中提到】
: Pack copy ctor 你没定义吧
avatar
N*K
9
你没有说清楚问题
A B C 是不是只有一份 然后共享? 那就用 shared_ptr
还是 随时可以生成? 那就用 unique_ptr
你到底要不要复制A的内容? 如果需要 A是否提供了类似复制的函数? 或者可以写
一个复制A的函数?

【在 q****x 的大作中提到】
: default by compiler ah.
: 即使自己定义,也得用到A/B/C的copy ctor,但已经被禁用了。

avatar
q*x
10

随时可以生成。
unique_ptr<>的copy ctor需要A的ctor,但是已经被禁用。
A是独立模块,不可能因为我这个应用而加复制函数。

【在 N******K 的大作中提到】
: 你没有说清楚问题
: A B C 是不是只有一份 然后共享? 那就用 shared_ptr
: 还是 随时可以生成? 那就用 unique_ptr
: 你到底要不要复制A的内容? 如果需要 A是否提供了类似复制的函数? 或者可以写
: 一个复制A的函数?

avatar
N*K
11
unique_ptr<> 有 copy ctor?

【在 q****x 的大作中提到】
:
: 随时可以生成。
: unique_ptr<>的copy ctor需要A的ctor,但是已经被禁用。
: A是独立模块,不可能因为我这个应用而加复制函数。

avatar
q*x
12
我是说Pack的copy ctor需要A的,如果用unique_ptr。
shared_ptr也许行。

【在 N******K 的大作中提到】
: unique_ptr<> 有 copy ctor?
avatar
N*K
13
Pack 里面不就几个指针么 复制pack 就是复制了几个 A B C的指针
为什么需要 A ctor?
unique_ptr 不能复制 你得用 shared_ptr
另外 你到底是复制 pack 里面 A的指针 还是A的内容?

【在 q****x 的大作中提到】
: 我是说Pack的copy ctor需要A的,如果用unique_ptr。
: shared_ptr也许行。

avatar
p*o
14
struct Pack {A a; B b; C c;};
std::map> pack_map_;
shared_ptr doesn't need copy ctor and assignment, it only
need to see the dtor at the time when you new Pack.
There is no need to use delete directly almost in all cases today.
If you use one, then there is a problem with your design.

tuple。

【在 q****x 的大作中提到】
: foo.h
: class A {
: // copy ctor and assignment disabled
: };
: class B {
: // copy ctor and assignment disabled
: };
: class C {
: // copy ctor and assignment disabled
: };

avatar
N*K
15
lz的c++基本概念不清楚 说了半天 都不知道要干啥

【在 p***o 的大作中提到】
: struct Pack {A a; B b; C c;};
: std::map> pack_map_;
: shared_ptr doesn't need copy ctor and assignment, it only
: need to see the dtor at the time when you new Pack.
: There is no need to use delete directly almost in all cases today.
: If you use one, then there is a problem with your design.
:
: tuple。

avatar
p*o
16
所以你要帮他发现需求 ...

【在 N******K 的大作中提到】
: lz的c++基本概念不清楚 说了半天 都不知道要干啥
avatar
q*x
17
让大牛见笑了。确实忘记shared_ptr怎么用了。

【在 p***o 的大作中提到】
: 所以你要帮他发现需求 ...
avatar
k*g
18

(1) std :: unique_ptr < T > (C++11) does not require T to implement copy
semantics.
http://en.cppreference.com/w/cpp/memory/unique_ptr
(2) range declaration type ... my personal advice is this.
for ( Pack & iter : pack_map_ ) { ... }
Pay attention that I specify the reference (ampersand), which avoids the
copy semantics issue.
This is actually a quite common problem. C++ programmers I know forgot that
without taking the reference (ampersand), the range-based for in C++11 will
make copies. Thus,
http://en.cppreference.com/w/cpp/language/range-for
http://stackoverflow.com/questions/15176104/c11-range-based-loo
(3)
Your type, "Pack", actually allows you to define copy. Copying a "Pack" in
this case means that the pointer values to A, B, C are being copied. Care
should be taken that one does not double-delete (or forget to delete) the
underling objects A, B, C.
(4)
If it is not performance critical, it is okay to use shared_ptr. It just
saves a lot of thinking and trouble. In many cases, as long as the amount of
useful work done is greater than the overhead, the overhead is relatively
unimportant.
This implies you know how to do software performance measurement well. If
you don't, this will be a good skill to focus on for the next few years.

【在 q****x 的大作中提到】
: method bar要遍历map:
: for (auto it : pack_map_) {
: }
: 这里pair会调用Pack的copy ctor

avatar
q*x
19
大牛纷纷出动啊。

that
will

【在 k**********g 的大作中提到】
:
: (1) std :: unique_ptr < T > (C++11) does not require T to implement copy
: semantics.
: http://en.cppreference.com/w/cpp/memory/unique_ptr
: (2) range declaration type ... my personal advice is this.
: for ( Pack & iter : pack_map_ ) { ... }
: Pay attention that I specify the reference (ampersand), which avoids the
: copy semantics issue.
: This is actually a quite common problem. C++ programmers I know forgot that
: without taking the reference (ampersand), the range-based for in C++11 will

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。