簡體   English   中英

返回指向靜態對象的指針

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM