c++ - 返回指向静态对象的指针

标签 c++ pointers

在一个 .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 访问,并且标准保证对象将在第一次调用访问器函数时创建 - 前提是它仅由一个初始化单线程...

关于c++ - 返回指向静态对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41458287/

相关文章:

java - 从 C++ 调用 dll 实现的 JNI

c++ - 标准中哪里说在下面调用 B::foo() 是合法的?

c++ - 如何在模板类中实现 move 语义

c - 访问嵌套结构成员的多种方式

c - 取消引用指向 void 数组的指针

c++ - 查询vs2010的属性表

c++ - 如何终止由 CreateProcess() 创建的进程?

c - 为什么在 C 中不能将二维数组转换为二维指针?

c - c中可以存在多少种指针值组合?

c - 如何从文件中读取指向整数指针的指针?