簡體   English   中英

使用G ++檢測shared_ptr類成員引用

[英]Detect shared_ptr class member reference with g++

使用g ++有什么方法可以檢測何時將類成員聲明為對shared_ptr的(const)引用? 我看不到有什么用,但是如果您不小心將成員聲明為引用,那么如果引用計數過早達到零(因為該成員不是該成員),則可能會遇到一些難以發現的錯誤。按價值持有)。

還是在這種情況下,您只是認真編寫代碼並依靠同行評審?

編輯:我正在考慮一些printf格式的字符串檢查/警告,其中進行了特定檢查。 例如,用於檢查shared_ptr ,而不是常規的“引用成員”警告。

沒有編譯器提供查找變量是否為引用的工具。 創建參考變量是一項非常瑣碎的操作,大多數時候意圖都是真實的。 獲取代碼中所有引用的編譯警告會很煩人。

找出變量是否被錯誤地聲明為引用的好方法是進行同行評審。

但是,如果您想自己檢測它,那么我現在可以想到一個hack。 我們可以利用這樣的事實,即引用必須始終在構造函數初始化 您可以為所有類創建具有故意怪異語法的通用構造函數。 例:

#define REFERENCE_CHECK(CLASS) CLASS(int***, char***)

class A {  // case [1]
  REFERENCE_CHECK(A) {}
};

class B {  // case [2]
  X &p;  // genuine reference
  REFERENCE_CHECK(B) : p(*new X) {}  // register with the constructor
};

class C {  // case [3]
  shared_ptr<int> &p;
  REFERENCE_CHECK(C) {} // compiler error, because 'p' is not registered
};

這是一個偽代碼; 請記住,如果需要,您可能還必須分別注冊基類和虛擬類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM