我一直在用 C++ 编写一个共享库,但我想通过库的用户共享一个类的一些实例。我的意思是,只读对象只从库中加载一次,并被链接到库的每个进程使用。
据我所知,这可以使用const
or进行static const
,但它不能按预期工作。
例如:
#include <iostream>
static const int x = 1;
int main()
{
std::cout << x << std:endl;
*(const_cast<int *>(&x)) = 2;
std::cout << x << std:endl;
return 0;
}
使用 GCC 4.8.1 代码编译得很好,但很明显,它在运行时失败,因为x
变量是只读的(它在我的 Linux 上产生分段错误)。
但是,让我们看看这段代码:
#include <iostream>
struct A
{
A() : x(1) {}
int x;
}
static const A a;
int main()
{
std::cout << a.x << std:endl;
const_cast<A *>(&a)->x = 2;
std::cout << x << std:endl;
return 0;
}
最后的代码编译并运行良好。可执行打印
1
2
我能够修改 const 数据!所以我猜 const 修饰符不适用于类。
然后我的问题是:
const static
修饰符对类的实例有什么作用?- 如何将实例放入共享库中以通过不同的进程共享它,加载一次并共享相同的 RAM 内存?
我要实例化的类继承自一个抽象类。我正在使用 C++11,但之前显示的代码在没有 C++11 支持的情况下进行了测试。
对不起,如果我犯了任何英语错误