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