是否有可能編寫一個智能指針,將對象本身分配給其構造函數 - 而不是開發人員必須調用new
?換句話說,而不是寫:爲什麼智能指針不能在構造函數中爲我調用new()?
std::unique_ptr<myClass> my_ptr(new myClass(arg1, arg2))
...一個可以寫:
std::smarter_ptr<myClass> my_ptr(arg1, arg2)
是語言的語法能夠表達這個的?這會是可取的嗎?可怕?我想特別防範這種錯誤的(我做了我自己,當然):
myFunction(std::unique_ptr<myClass>(new myClass()), std::unique_ptr<myClass>(new myClass()))
...哪些風險泄漏如果第二分配較遲者爲準對象第一次分配和投在第一個物體安全地放入其智能指針之前。但是一個更聰明的指針實際上會讓這個安全嗎?
@Joe:這是一個問題;在使用任何結果初始化一個智能指針之前,生成的代碼很可能執行兩個'new'表達式;在這種情況下,如果第二次投擲,你會得到泄漏。 – 2012-07-27 13:47:23
@Joe:你錯了。 'tmp1 = new myClass(); tmp2 = new myClass(); arg1 = std :: unique_ptr(tmp1); arg2 = std :: unique_ptr(tmp2); myFunction(arg1,arg2);'是完全合法的執行順序。 – 2012-07-27 13:47:31
夠公平的,我試圖證明自己不正確。謝謝。 – Joe 2012-07-27 13:48:06