第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使獨特和完美的轉(zhuǎn)發(fā)

使獨特和完美的轉(zhuǎn)發(fā)

C++
三國紛爭 2019-07-05 12:54:11
使獨特和完美的轉(zhuǎn)發(fā)為什么沒有std::make_unique標(biāo)準(zhǔn)C+11庫中的函數(shù)模板?我發(fā)現(xiàn)std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));有點冗長。下面這些不是更好嗎?auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);這隱藏了new很好,只提到過一次類型。無論如何,下面是我試圖實現(xiàn)的make_unique:template<typename T, typename... Args>std::unique_ptr<T> make_unique(Args&&... args){     return std::unique_ptr<T>(new T(std::forward<Args>(args)...));}我花了好長時間才弄到std::forward需要編譯的東西,但我不確定它是否正確。是嗎?究竟是什么std::forward<Args>(args)...刻???編譯器對此有何看法?
查看完整描述

3 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗 獲得超6個贊

不錯,但是Stephan T.Lavavej(更著名的名字是STL)有一個更好的解決方案make_unique,它對數(shù)組版本正確工作。

#include <memory>#include <type_traits>#include <utility>template <typename T, typename... Args>std:
:unique_ptr<T> make_unique_helper(std::false_type, Args&&... args) {
  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));}template <typename T, typename... Args>std:
  :unique_ptr<T> make_unique_helper(std::true_type, Args&&... args) {
   static_assert(std::extent<T>::value == 0,
       "make_unique<T[N]>() is forbidden, please use make_unique<T[]>().");

   typedef typename std::remove_extent<T>::type U;
   return std::unique_ptr<T>(new U[sizeof...(Args)]{std::forward<Args>(args)...});}template <typename T, typename...
    Args>std::unique_ptr<T> make_unique(Args&&... args) {
   return make_unique_helper<T>(std::is_array<T>(), std::forward<Args>(args)...);}

這是可以看到的他的核心C+6視頻.

STL版本make_UNIQUE的更新版本現(xiàn)在可作為N 3656..這個版本被收養(yǎng)變成草案C+14。


查看完整回答
反對 回復(fù) 2019-07-05
?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊

std::make_shared不只是簡寫std::shared_ptr<Type> ptr(new Type(...));..它做了一些你不可能不用它就行。

為了完成它的任務(wù),std::shared_ptr除了保存實際指針的存儲空間之外,還必須分配跟蹤塊。但是,因為std::make_shared分配實際對象時,有可能std::make_shared分配兩個對象同一內(nèi)存塊中的跟蹤塊。

所以當(dāng)std::shared_ptr<Type> ptr = new Type(...);將是兩個內(nèi)存分配(一個用于new,一個在std::shared_ptr跟蹤塊),std::make_shared<Type>(...)會分配記憶塊。

的許多潛在用戶來說,這是很重要的。std::shared_ptr..唯一的一件事std::make_unique這樣做會稍微方便一些。僅此而已。


查看完整回答
反對 回復(fù) 2019-07-05
  • 3 回答
  • 0 關(guān)注
  • 406 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號