ある.ccファイル内のオブジェクト内に静的ポインタを宣言し、そのポインタを関数で別の.ccファイル内の2番目の静的ポインタに戻すことは安全かどうかですか?私は、file_a.ccとfile_b.ccに2つの静的ポインタを持っていますが、file_a.ccで宣言された同じオブジェクトを指し示す関数をfile_b.ccのポインタに使用します。私は何か悪いことをしているように感じます。私ですか? foo()とprint_object()を呼び出すと、1が出力されるので、ポインタは同じオブジェクトを指しています。スタティックオブジェクトへのポインタを返す
/** file_a.h */
#ifndef FILE_A_H
#define FILE_A_H
struct Object {
int value = 0;
}
Object* get_object();
void print_object();
#endif
/** file_a.cc */
#include "file_a.h"
static Object* object = new Object();
Object* get_object() {
return object;
}
void print_object() {
std::cout << object->value << std::endl;
}
/** file_b.h */
#ifndef FILE_B_H
#define FILE_B_H
#include "file_a.h"
void foo();
#endif
/** file_b.cc */
#include "file_b.h"
static Object* object = get_object();
void foo() {
object->value += 1;
}
これは私にとってはシングルトンパターンの少し修正されたバージョンのようです(実際のシングルトンパターンを使用していない理由はわかりません)。シングルトンと同じ落とし穴/潜在的な問題もあります(いくつかの議論や詳細へのリンクについては、[この質問](http://stackoverflow.com/questions/1008019/c-singleton-design-patternを参照))。 – UnholySheep
ええ、私はそれがかなりシングルトンだと思います。私はそのパターンに従うことに着手せず、自分自身で試していたので、そんなことは考えていませんでした。 – Exudes
あなたが他のファイルのオブジェクトのinitializationof * order *に頼っていない限り、あなたは良いはずです –