2013-07-22 64 views
1

我对std::unique_ptr的看法让我相信,它(和其他智能指针一起)对于项目内部的指针来说绝对是最好的选择(特别是在Could an optimizing compiler remove all runtime costs from std::unique_ptr?之后),但我还不确定在界面上做什么。我并不完全理解各种C++ ABI的工作方式,所以如果这是一个愚蠢的问题,请耐心等待,但是可以使用返回指针,具有指针成员的类/结构等的函数替换为使用unique_ptr (可能使用unique_ptr参考?),而不需要重新编译? C代码可以使用unique_ptr与C++接口进行交互,而不会出现复杂情况?是std :: unique_ptr ABI兼容原始指针?

+0

除非您将*内存所有权*转移给函数,否则它没有考虑unique_ptr的业务。只需停止在任何地方使用'delete'并使用具有适当所有权语义的智能指针。一个采用裸指针的函数不会声明该指针的所有权,并且不应该在函数的作用域之外访问该指针(即:将其存储在全局或某物中)。 [这是一个调查的方式来传递unique_ptrs及其含义](http://stackoverflow.com/questions/8114276/how-do-i-pass-a-unique-ptr-argument-to-a-constructor-or -a功能/ 8114913#8114913)。 –

回答

5

AFAIK,有没有保证sizeof(unique_ptr<T>) == sizeof(T*),所以没有。

但即使它的大小相同,也不能保证任意ABI将通过与“值”参数相同的机制传递指针参数。