[英]What is the cleanest way of defining a no-delete pointer?
我最近遇到了一個舊的C函數,該函數返回一個指向靜態數組的指針。 我圍繞該函數編寫了一個包裝器,並返回了一個std::unique_ptr
,它使用不刪除來強調返回的指針的類型-向用戶發出“請勿刪除我”警告。 這是示例代碼
extern "C" int *f(int i);
struct noop
{
template <typename T>
void operator() (T t) const noexcept
{
}
};
class MyClass
{
public:
std::unique_ptr<int, noop> F(int value) const
{
return std::unique_ptr<int, noop>(f(value));
}
};
有沒有定義不刪除結構的更干凈的方法?
[..]舊的C函數返回指向靜態數組的指針。 我圍繞該函數編寫了一個包裝器,並返回了
std::unique_ptr
別這樣 返回std::unique_ptr
對調用者說:
對於靜態數組的指針,這都不是真的!
堅持使用原始指針或使用一些包裝器類以允許類似引用的訪問。 std::reference_wrapper
還提供例如復制時的原始指針之類的語義。
C ++編碼准則建議使用別名或“虛擬”包裝器來表示所有權或非空性:
對於其實現,請查看:
https://github.com/Microsoft/GSL/blob/master/include/gsl/pointers
您將看到owner<>
和non_null<>
的示例。
您可以類似定義。 顯然,不能刪除非所有指針。 如果您只想提醒一下,那么
template <class T, class = std::enable_if_t<std::is_pointer<T>::value>>
using non_owner = T;
如果要強制執行,請從鏈接中復制並修改non_null<>
的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.