C ++静态变量动态

时间:2010-04-18 16:28:03

标签: c++ dynamic variables

在类上使用静态动态变量是否可能或有意义,用new运算符初始化?

4 个答案:

答案 0 :(得分:2)

这可能没什么意义,但你当然可以这样做:

 static int * p = new int(1);

问题在于破坏对象。这可能在实践中并不重要,除非析构函数有一些你需要的副作用(例如写入文件),在这种情况下静态智能指针将(可能)完成这项工作。

话虽如此,

static int i = 1;

在几乎所有情况下都会更好。

编辑:我误解了你的问题,但我会把它留在这里,因为它确实建议模糊的好习惯。

答案 1 :(得分:2)

你的意思是以下?是的,这是允许的。

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());

答案 2 :(得分:1)

如果你想确保在程序退出后清理它:

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 answer。)

答案 3 :(得分:1)

声明中:

static cMyClass* p = new cMyClass() ;

p称为“静态动态变量”是不正确的。它是cMyClass *类型的静态指针变量,指向动态分配的对象。

通过将其称为“静态动态”变量,您可以将其视为一个悖论,而实际上它只是对可能完全合理的事物的描述不佳。有两个变量:1)指针是静态的,2)是动态的对象。