如何从多个对象访问同一资源? 我对C++ OOP比较新,请耐心等待。

如何从多个对象访问同一资源? 我对C++ OOP比较新,请耐心等待。,c++,class,object,driver,hardware,C++,Class,Object,Driver,Hardware,我正在为CAN总线协议使用第三方驱动程序,该协议是为专用硬件(PCIE模块)实现的。它附带了一个类,允许您实例化can\u read和can\u write对象 这个库在我自己的程序中使用,我有一个类和前面提到的类的7个实例,它们需要访问主文件中全局范围内定义的can_write对象 我遇到的问题是可以写入对象。作为一个驱动程序级库,它从can\u write对象访问相同的内存地址。如果我有一个成员函数,它按值接受can\u writer,那么只要访问它时出现“双重释放或损坏”错误,程序就会崩溃

我正在为CAN总线协议使用第三方驱动程序,该协议是为专用硬件(PCIE模块)实现的。它附带了一个类,允许您实例化
can\u read
can\u write
对象

这个库在我自己的程序中使用,我有一个类和前面提到的类的7个实例,它们需要访问主文件中全局范围内定义的
can_write
对象

我遇到的问题是
可以写入
对象。作为一个驱动程序级库,它从
can\u write
对象访问相同的内存地址。如果我有一个成员函数,它按值接受
can\u writer
,那么只要访问它时出现“双重释放或损坏”错误,程序就会崩溃

我现在正在通过引用传递
can\u writer
object(“CanClass&a”用于参数),它似乎有效,但是我不确定这是一种好的做法还是一种传统的做法。这样做对吗?如果没有,正确的方法是什么?任何参考资料,甚至简短的解释都会非常有用


编辑:我必须避免创建
can\u writer
的副本,因为它会读到内存损坏,因此我的
类Foo
的所有7个实例都需要访问完全相同的
can\u write

实例。您可以在类上使用单例模式()的变体

例如,您可以有一个get_can_write()方法来检查是否实例化了can_write对象,如果是,则返回对此对象的引用,否则它将创建一个can_write对象,保留对该对象的引用并返回它

提供can_write和can_read的类如下所示:

类栏{
私人:
静态can_写入*cw;
静态can_读取*cr;
公众:
静态can_write*获取can_write(){
如果(cw==null)
cw=新can_写入;
返回cw;
}
静态可读取*获取可读取(){
if(cr==null)
cr=新的can_读取;
返回cr;
}
}
使用can_write和can_read的类如下所示:

class-Foo{
公众:
void doSomeRead(){
字符串s=Bar::get_can_read()->doSomething();
}
void doSomeWrite(){
Bar::get_can_write()->doSomething(“测试”);
}
}

谢谢您的回复。请你再详细说明一下,这将如何解决问题?每个“can_write”对象都将访问相同的内存地址,我想让我的所有7个对象都访问同一个对象。我刚刚编辑了我的答案,添加了一些示例,说明了如何做到这一点。请注意,你的getter返回指针,因此需要
->
访问成员感谢注释,我编辑我的答案是为了更可靠。嗨,我想我还没有说清楚。Can_writer将访问硬件模块的相同寄存器,有多个实例会导致模块错误和内存错误,我想使用我自己的7个对象中的同一个对象。