我正在研究使用 CORBA 的遗留产品。我们希望作为另一家供应商支持omniiORB 。我遇到了我们的一个测试段错误,我试图了解我们是否在与其他供应商合作时做错了什么,或者omniiORB是否存在错误。
我使用 Red Hat EPEL (4.2.0) 中的omniiORB 版本进行了测试。我还下载并构建了最新版本 4.2.3,但仍然看到错误。
下面是一个测试用例,我认为它展示了我在代码中看到的行为。
#include <omniORB4/CORBA.h>
//#include "typedefs.hh"
#include <iostream>
// only happens with string types.
// primitive CORBA types and user-defined types don't cause the error
int main() {
CORBA::Any any1;
any1 <<= "Hello";
CORBA::Any any2;
any2 = any1; // copy the any, seg fault in omniiorb
// any2 <<= any1; // any inside any, also seg faults
// CORBA::Any any2(any1); // copy constructor, also seg faults
return 0;
}
我知道提取到生成的智能指针会导致问题,因为 any 应该保留所有权。但是在复制Any的情况下,它不应该做一个深拷贝吗?我在这里想念什么?
我还有另一个简短的例子,它更接近于我们的遗留代码所做的,如果这个例子被认为不具代表性,那么它涉及一个简单的 IDL。
遗留代码所做的要点是复制使用 any 作为值的属性,因此它可以是任何值。我们过去没有发现 Visibroker 或 ACE+TAO 出现任何问题。