C ++从指针构造

时间:2016-05-26 13:35:11

标签: c++ c gcc visual-c++ constructor

我正在尝试使我的项目符合GCC以链接与MSVC编译的库(我没有任何来源)。问题是这个库也存在于linux x86,x86_64和用GCC编译的arm平台(我的项目是跨平台),我不想编写很多依赖于平台(和编译器相关)的代码。与项目链接的其他库也设计为由GCC编译(如ffmpeg和vlc),我无法迁移到MSVC。 为此,我编写了C风格的包装库(基于原始标题)。

类的构造函数和析构函数以这种方式完成:

__declspec(dllexport) void* myClass_myClass()
{
    void* ptr = new myClass();
    return ptr;
}
__declspec(dllexport) void myClass_unmyClass(void* ptr)
{
    delete((myClass*)ptr);
}

此部分使用MSVC编译并链接到原始库。如你所见(我可以在依赖walker中看到它)我有c风格的导出,我可以链接到GCC。它分配内存,创建对象并按设计行事。

现在我正在编写包含类的包装器的第二部分,并将使用GCC编译并链接到我的项目。它应该基于库的原始标题(以确保它与此库的linux和windows-版本的原始行为相同)。我怀疑如何构建类的构造函数和析构函数。 我们说我们有

class MyClass
{
public:
    MyClass()
    ~MyClass()
}

在原始标题中。

如何在.cpp中定义以绕过对我的c-style" consturctor"的调用?和#34;析构者" (所以他们会绕过对原始构造函数和析构函数的调用)?

}在构造函数中指定this指针会很棒,但是它是禁止的。

P.S。我没有班级内部。他们都有

private: myClassImpl* m_pImpl;

因此我无法使用复制构造函数。即使我可以 - 我不想构造相同对象的2倍。

1 个答案:

答案 0 :(得分:1)

您的包装类应该是一个句柄类,它在构造函数中调用myClass_myClass(),将返回的指针存储为成员,并在存储指针的析构函数中调用myClass_unmyClass()。应该在包装器中复制原始类中的所有成员函数,但只需在存储的指针上调用原始函数(通过包装器" C"函数)。小心复制构造函数和复制赋值运算符 - 默认值不会做正确的事情。您必须删除它们或实现它们以调用适当的包装器" C"功能