gpt4 book ai didi

c++ - 从共享对象中的类继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:39 25 4
gpt4 key购买 nike

我想通过继承扩展 Linux 共享对象中类的 C++ 命名空间。可能出现哪些问题,尤其是涉及静态对象和成员数据的问题?

// as a crude example (note: untested code)
// compiled into libBase.so
namespace foo
{
class Cfoo
{
protected:
static double Pi; // defined outside header
public:
Cfoo () {}
double fooPi () { Pi *= Pi; return Pi; }
};
}

// compiled into libDerived.so
namespace foo
{
class Cbar : public Cfoo
{
double barPi () { Pi = sqrt(Pi); return Pi; }
};
}

平台:RHEL 5 上的 GCC 4.5。

最佳答案

(类)全局静态变量在不同翻译单元中的初始化顺序是undefined .但是,如果将类静态变量 Pi 包装到成员函数中,则可以将其替换为局部静态对象。 Effective C++ Item 4:“通过用本地静态对象替换非本地静态对象来避免跨翻译单元的初始化顺序问题。”。如果该对象保持全局静态,则可能会在其他代码使用它之前保持未初始化状态。

protected:
static double PI()
{
static double PI = 3.141;
return PI;
}

关于c++ - 从共享对象中的类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com