[英]Return pointer to static object
是在一個.cc文件中的對象中聲明一個靜態指針,然后將帶有函數的指針返回到另一個.cc文件中的第二個靜態指針是安全還是不良做法? 我在file_a.cc和file_b.cc中有兩個靜態指針,但使用函數使file_b.cc中的指針指向在file_a.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;
}
這里真的沒有什么不好的。 在不同的編譯單元中有兩個不同的靜態指針,但是兩者都指向同一對象。
簡單地說,這不是常見的模式,因為對象是在其訪問器函數之外創建的。 這段代碼更常見:
Object* get_object() {
static Object* object = new Object();
return object;
}
它提供了更好的封裝,因為只能通過get_object
來訪問該對象,並且該標准保證了該對象將在首次調用accessor函數時創建-前提是該對象只能由一個線程初始化。
在2個源文件中聲明2個同名的static
變量會導致2個不同的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.