我非常支持使std::shared_ptr<T>
構造函數接受T *
顯式的想法。它有助於節省不眠之夜,當你正在查看堆腐敗的原因。 Scott Meyers給出了一個很好的解釋。std :: shared_ptr <T>:隱式構造函數的右值指針T
但是......如果我給它一個rvalue
指針是不是明確的?我可以做這樣的事情:
/// (1)
std::shared_ptr<T> t = new T;
或
/// (2)
T * giveaway = new T;
std::shared_ptr<T> t = std::move(giveaway);
或從現實生活更加痛苦的情況下
/// (3)
void foo(std::shared_ptr<T> t);
/// ...
foo(new T);
對我來說,所有這些情況都不夠明確。 (1)是一個prvalue
,我不可能把自己搞砸有兩個指針。至少不能使用:
std::shared_ptr<T> t{new T};
情況(2)非常明確。一致認爲,在你移動了某個東西之後,它的價值變得不確定。所以使用它完全在你身上。 (3)再次爲rvalue
。
(Q1)它這是標準委員會的眺望嗎?
(Q2)這是有原因嗎?
(Q3)隱式構造函數接受rvalue
出現在C++ 14中的任何機會?
到Q3:C++ 14是官方的,並沒有改變。 – Deduplicator 2014-09-26 08:03:13
我錯過了什麼嗎?爲什麼不使用make_shared? – 2014-09-26 08:04:27
@MarcoA。同樣的原因,我們不使用'std :: string(「literal」)',我們將字面值傳遞給接受'std :: string'的函數。它很簡單。 – GreenScape 2014-09-26 08:06:35