这是使用void *成员指针的正确方法吗?

时间:2011-07-15 14:12:06

标签: c++

我可以使用像这样的doSomething方法;首先将指向A类的指针分配给b?

的void *成员
class A
{
    public:
        A(int);
        int m_x;
        int doSomething(){};
};

class B
{
    public:
        void* m_y;
};

#include "x.h"
using namespace std;

A::A(int x)
{
    m_x = x;
}

int main()
{
    //create 2 pointers to A and B
    B *b;
    A *a;

    b = new B();
    a = new A(15);

    b->m_y =  a;        

    ((A*)b->m_y)->doSomething();

    delete a;
    delete b;

   return 0;
}

4 个答案:

答案 0 :(得分:5)

远离void*

为什么不在[{1}}中指向A(或者甚至,B拥有B的实例),或A拥有智能指针对B的实例 - 还有很多其他更好的做事方式。

答案 1 :(得分:3)

是的,你可以,但你不应该使用C风格的演员表。更好地使用static_cast

(static_cast<A*>(b->m_y))->doSomething();

答案 2 :(得分:2)

是的,这在技术上是正确的,但它也没用。

如果您知道将在A*中存储m_y,那么为什么不给它那种类型?如果您事先不知道要存储的确切类型,请使用继承和多态(virtual),这样很多更安全。

编辑:好的,这是与旧代码的接口。然后static_cast是最清洁,最明确的方式来进行演员表演。然而,它完全等同于你正在做的事情。

答案 3 :(得分:0)

没有。没有正确的方法来使用void*指针。