簡體   English   中英

C ++靜態變量動態

[英]C++ static variables dynamic

在類上使用new運算符初始化靜態動態變量是否可行或有意義?

這可能沒有多大意義,但您當然可以做到:

 static int * p = new int(1);

問題出在銷毀對象上。 在實踐中,這可能無關緊要,除非析構函數具有您所需的某些副作用(例如寫入文件),在這種情況下,靜態智能指針將(可能)完成這項工作。

話說回來,

static int i = 1;

在幾乎所有情況下似乎都是可取的。

編輯:我誤解了您的問題,但是我將其保留在這里,因為它確實建議了模糊的良好實踐。

您是說以下意思嗎? 是的,允許。

class Class {
  static Base *b;
};

Base *Class::b = new Derived();

如果需要在程序退出時銷毀它,請使用智能指針

class Class {
  static boost::scoped_ptr<Base> b;
};

boost::scoped_ptr<Base> Class::b(new Derived());

如果要確保在程序退出后將其清除:

struct foo
{
    static double* d;
};

namespace
{
    void delete_double(void)
    {
        delete foo::d;
    }

    double* get_double(void)
    {
        double* result = new double();
        atexit(delete_double);

        return result;
    }
}

double* foo::d = get_double();

或使用智能指針(請參閱Johannes答案 。)

在聲明中:

static cMyClass* p = new cMyClass() ;

p稱為“靜態動態變量”是不正確的。 它是cMyClass *類型的靜態指針變量,指向動態分配的對象。

通過將其稱為“靜態動態”變量,您聽起來像是一個悖論,而實際上,它只是對可能是完全合理的事物的簡短描述。 有兩個變量:1)靜態的指針,和2)動態的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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