在一个.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;
}
发布于 2017-01-04 07:46:14
这里并没有什么真正糟糕的东西。在不同的编译单元中有两个不同的静态指针,但它们都指向同一个对象。
简单地说,这不是常见的模式,因为对象是在其访问器函数之外创建的。下面的代码更常见:
Object* get_object() {
static Object* object = new Object();
return object;
}
它提供了稍微好一点的封装,因为对象只能通过get_object
访问,并且标准保证对象将在第一次调用访问器函数时创建-前提是它只由一个线程初始化……
发布于 2017-01-04 07:34:48
在两个源文件中声明两个同名的static
变量会导致两个不同的实例。
https://stackoverflow.com/questions/41458287
复制