首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >返回指向静态对象的指针

返回指向静态对象的指针
EN

Stack Overflow用户
提问于 2017-01-04 15:22:07
回答 2查看 616关注 0票数 0

在一个.cc文件中的对象中声明一个指向的静态指针,然后用函数将该指针返回到另一个.cc文件中的另一个静态指针,这是安全还是不好的做法?我在file_a.cc和file_b.cc中有两个静态指针,但使用一个函数使file_b.cc中的指针指向file_a.cc中声明的同一对象。感觉我在做一件很糟糕的事。我是吗?如果我调用foo(),然后调用print_object(),它将打印1,所以指针指向同一个对象。

代码语言:javascript
代码运行次数:0
运行
复制
/** 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;
}
EN

回答 2

Stack Overflow用户

发布于 2017-01-04 15:46:14

这里并没有什么真正糟糕的东西。在不同的编译单元中有两个不同的静态指针,但它们都指向同一个对象。

简单地说,这不是常见的模式,因为对象是在其访问器函数之外创建的。下面的代码更常见:

代码语言:javascript
代码运行次数:0
运行
复制
Object* get_object() {
    static Object* object = new Object();
    return object;
}

它提供了稍微好一点的封装,因为对象只能通过get_object访问,并且标准保证对象将在第一次调用访问器函数时创建-前提是它只由一个线程初始化……

票数 1
EN

Stack Overflow用户

发布于 2017-01-04 15:34:48

在两个源文件中声明两个同名的static变量会导致两个不同的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41458287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档