最近、私はCを使ってオブジェクト指向プログラミングを学び始めました。 ウェブ上で興味深い資料を見つけました。それらの1つはGithubのQMonkey/OOC-Design-Patternリポジトリです。以下は_construct(Cではoopプロジェクトで使用されるマクロ)
QMonkey/OOC-デザインパターンに含まれるbase.hは次のとおりです。 https://github.com/QMonkey/OOC-Design-Pattern
は、ここに私の質問です。 これは、このOOP Cプロジェクトで使用される基本マクロです。 #、##、offsetof、およびcontainer_ofについて多くの説明がありました。 私はそれを理解できない唯一の事は、_destructと_constructの使い方です。彼らの説明はどこにありますか?
ありがとうございました。
#ifndef BASE_H
#define BASE_H
#include <stdlib.h>
#include <stddef.h>
// clang-format off
#define container_of(ptr, type, member) \
({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type,member)); \
})
#define new(TYPE, args...) TYPE ## _construct(malloc(sizeof(TYPE)), ## args)
#define delete(TYPE, ptr) do \
{ \
TYPE ## _destruct(ptr); \
free(ptr); \
} \
while(0)
// clang-format on
#endif
私は、そのプロジェクトの作者がOOPをどのように定義しているのか疑問に思います... 'new'と' delete'はOOPと全く関係ありません。また、不透明/不完全型を使用せずにクラスの割り当て/解放を試みるCコードはおそらく疑わしい品質です。 – Lundin