[英]Implementation of dynamic initialization for global variables and static member variables in 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.