[英]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.