C delete自定義資料庫型別導致記憶體洩露

2021-09-12 14:13:25 字數 1108 閱讀 5176

一, 問題場景

**中使用自定義資料型別時,為了提高入參,出參普遍性。使用了void *指標型別管理入參出參。當釋放記憶體時沒有指定指標指向的型別,從而導致記憶體洩露。

typedef std::shared_ptrspiworker;

typedef std::weak_ptrwpiworker;

typedef std::shared_prtspiobserver;

typedef std::weak_ptrwpiobserver;

class ctaskopr

virtual ~ctaskopr(){}

virtual void setproxy(spiworker spworker)

virtual void setobserver(spiobserver spobserver)

//直接使用父類時,不能重複呼叫此介面,需要對應子類知道引數型別,才能正確釋放記憶體

virtual void setinparam(const void *pinparam) = 0;

virtual int onwork()

virtual int notify()

protected:

void *m_pinparam;

void *m_poutdata;

wpiworker m_wpworker;

wpiobserver m_wpobserver;

}typedef std::shared_ptrsptaskopr;

使用該父類時,直接對void *指標delete操作導致,記憶體洩露:

typedef struct _sproduceparam

sproduceparam, *psproduceparam;

class cproducetask :public ctaskopr

}void setinparam(const void *pinparam)

m_pinparam = new sproduceparam;

assert(m_pinparam);

(*m_pinparam) = *pinparam;

}}

自定義mysql資料庫函式 資料庫自定義函式

這個為通用過濾關鍵字的函式,若有其他關鍵字未新增可以參考語法加入。use db go object userdefinedfunction dbo f filterstring script date 12 09 2013 17 03 45 set ansi nulls on go set quot...

資料庫PostrageSQL 自定義選項

這個特性被設計用來由附加模組向postgresql新增通常不為系統知道的引數 例如過程語言 這允許使用標準方法配製擴充套件模組。自定義選項有兩部分名稱 乙個副檔名,然後是乙個句點,再然後是正確的引數名,就像sql 中的合格名稱。乙個例子是plpgsql.variable conflict。因為自定義...

SQLserver 資料庫自定義函式

最近專案開發上使用的sqlserver資料庫是2008版本,由於08版本的資料是沒有字串合併 string agg 這個函式 2017版本及以上支援 的,只有用stuff for xml path 來達到效果。所以才有萌生出了自定義聚合函式的想法。第一步新建專案 2008版本選擇 檔案 新建 專案 ...