开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 6
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
N/A
问题(Question):
我现在需要提供一Library给多执行绪程式,Library的实作有包含其它类别的物件
预期使用API创建不同的物件应该为资源独立
但实际去跑才发现同类别的二个物件,其底层使用的其它物件是同一份
例如:
// Library的header
class Lib_Impl; // Library的实作类别
class Lib
{
public:
Lib(void) {};
void set_id(int obj_id);
....
private:
Lib_Impl *m_impl;
};
// Library的cpp档
Lib::Lib()
{
m_impl = new Lib_Impl();
}
void Lib::set_id(int obj_id)
{
m_impl->obj_id = obj_id;
}
假如Lib_Impl有个成员变量为obj_id,Library提供一API去设定它
如果使用者create 2个Lib物件并设定不同的id
例如:
// 使用此Library的cpp档
void main()
{
// Create Library object
Lib *obj_1 = new Lib();
Lib *obj_2 = new Lib();
obj_1->set_id(1);
obj_2->set_id(2);
}
此时我预期二个物件底下Lib_Impl的id应该是不一样的
但obj_1底下的id都会被obj_2所影响
请问是哪里出错了呢?
此Library的设计方式如果在多执行绪的环境创建多个物件会是安全的吗?
谢谢
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
谢谢johnpage网友, 我回去检查Lib_Impl类别, 因为它是用工厂方法创建的
而我把二个可能创建的类别宣告成全域物件才会导致这个问题