老闆不讓用shared ptr,會是什麼原因?

時間 2021-05-05 17:13:53

1樓:bear

@Homunculus

例5的處理方法:

struct tagThreadParam :public std::enable_shared_from_this

tagThreadParam()

DV("%s", __func__);

virtual ~tagThreadParam()

DV("%s", __func__);

shared_ptr mSelfRef;

string mName = "Hello";

DWORD WINAPI _WorkThreadCB(LPVOID pParam)

ShellTool::Sleep(3000);

shared_ptr obj;

auto ptr = (tagThreadParam*)pParam;

obj = ptr->mSelfRef;

ptr->mSelfRef = nullptr;

DV("name=%s", obj->mName.c_str());

return 0;

int Test()

auto obj = make_shared();

obj->mSelfRef = obj;

ShellTool::QueueUserWorkItem(_WorkThreadCB, (PVOID)obj.get());

ShellTool::Sleep(5000);

2樓:Star.E

shared_ptr確實是奇葩,用法至少十種以上,多到懷疑人生。其中還有很多坑,比如deleter放在control block裡,只有在所有weak,strong計數清零後才會析構,如果deleter裡包含了別的資源,會有潛在洩漏可能。還有shared_from_this沒有allocator引數(以前是這樣)。

多執行緒析構在哪個執行緒不確定,這導致allocator必須執行緒安全。shared_ptr本身執行緒也不安全,多執行緒使用要先複製乙個。建議無腦使用unique_ptr。

shared_ptr真的沒啥卵用,很少有東西所有權不明確。我感覺只有asio裡不斷給connection續命時,才會用到

3樓:補佳林

很簡單,『delete this與 shared ptr衝突,你必須修改delete this的地方,也就是完全修改之前記憶體管理的方式。

4樓:cart zhang

有幾種可能,一、老闆怕你們不會用瞎用。這導致專案不能按正常完工或後期問題多,坑太多!

二、老闆明白小專案不用那些也沒問題,他知道其中利弊!再說最基礎的new delete你們用的還是可以的!

三、他有其他沒有說的想法!比方說優化下再給你們用!或對智慧型指標有意見…

這事你想明白,去問他呀!

5樓:Xi Yang

shared_ptr是一朵巨大的奇葩。丫的引用計數是new在堆上的,而正常的引用計數系統都是把計數器和物件放在一起。於是,你只要用了shared_ptr,就必須全都用,否則可以輕而易舉地搞死:

Foo* foo = new Foo();

shared_ptr ref_a(foo);

shared_ptr ref_b(foo); // 你死了想要用引用計數,你們可以簡單地寫個帶有計數器的基類,和使用計數器的智慧型指標類,加起來幾十行而已。或者用boost的intrusive_ptr。

6樓:不知道叫啥

1.你們老闆不相信你。

2.你們老闆不相信shared_ptr。

ps:很多公司不不讓用像stl,boost之類的開發庫,寧願自己寫乙個。說明:

1.他們水平不足。

2.對自己無法掌控的事物都有一種排斥感。

7樓:王劍飛

shared_ptr的「原罪」之一是「傳染性」:乙個對外的介面中使用了shared_ptr,那麼所有使用這個介面的地方全都要改為使用shared_ptr,否則shared_ptr無法覆蓋到物件整個生命週期,就成了擺設。

所以「改用shared_ptr」一般是整個專案的技術決策者來把握的事情,這裡面還有要求「團隊成員都要掌握正確使用shared_ptr方法」的成本,怎麼看都不會是題主這樣的「新人」能來推動的。

8樓:hearts zh

shared_ptr其實用起來也不能無腦用。

1. 開銷太大,如果大量小資料,幾十萬幾百萬那種的,迴圈一遍比raw指標慢好多倍

2. 即使有shared_ptr,一不注意還是會有洩露。一種不容易發現的情況是,用enabled_shared_from_this,然後bind一下,註冊另外乙個類的callback,另外你剛好又有另乙個類的shared_ptr成員。。

總之,能用unique_ptr就unique_ptr,大量小資料不要用shared_ptr,否則基本用起來沒什麼問題,注意記憶體洩漏就好。

9樓:

我能想到的原因是由這些指標管理的情形同時有如下特徵:

1. 物件本身比較小,可能與shared_ptr引用控制塊的大小在乙個數量級。

2. 指標基本上是獨佔物件的,沒有共享。(你可以用std::unique_ptr啊!)

3. 小記憶體環境,對記憶體占用非常敏感。

4. 物件數量異常多。

5. 不可避免的迴圈引用。

但是話又說回來,如果真出現了上面前4點這些情況。說明記憶體上需要自己額外下點功夫。使用自定義的分配器管理和使用記憶體,合理優化分配策略以減少碎片的產生,這些事情往往又不是簡單的原生new / delete能做好的。

總之,如果shared_ptr都出問題了,那麼使用原生指標出問題的日子也差不了幾天了。。

為什麼奶茶店老闆不讓店員說自己是老闆?

阿文啊 拿自己來說說吧,我就賊不喜歡員工和顧客叫我老闆,主要是有一種隔閡感,和顧客在一起感覺有距離,和廚師坐一起的時候感覺他們會很拘束。尤其是這種五六個人的小店,我更喜歡我們打成一片,所以我就讓他們都叫我名,因為他們確實也都比我大,除了廚師喊他們姓加師傅,別人都喊他們名家姐 哥。於員工來說,小店不像...

求助攻,老闆不讓離職怎麼破!?

Mark 在火星 沒有老闆不讓離職一說,離職是乙個客觀行為,是因為你的想法讓它不好實施。老闆不讓,或者你不想,只是因為老闆的做法讓你不舒服,離職的代價超過了你接受的範圍。既然有代價,就是交換,你可以給交換的籌碼太少了。至於你有什麼能夠超出老闆的想象,那就要靠你自己去琢磨了,也許只是乙個想法,很多時候...

想辭職老闆不讓辭職怎麼辦?

九九九 這個問題首先要從自身出發了,要看你自己是因為什麼原因離職,錢少 活多 離家遠等等 如果現在的工作內容你覺得很喜歡也很想為之奮鬥,但是奈何老闆給的錢不多想離職那就直接跟他談工資,如果他不給你漲那就問他原因,要是覺得他說的有道理就再思考思考。一般不讓走都是覺得你有一定的價值,只要提了基本都會漲。...