【问题标题】:Can void pointer store the address of class object in C++? [closed]void指针可以存储C++中类对象的地址吗? [关闭]
【发布时间】:2016-01-07 07:04:21
【问题描述】:

我是 C++ 新手,请告诉我是否可以将类地址存储在 void 指针中?

【问题讨论】:

  • C++ 中没有类对象。类不是 C++ 中的对象。
  • 你是怎么想的..你能说明你的想法吗(c++示例代码)
  • @GingerPlusPlus:标准不同意你(关于前者,而不是后者)。
  • @Benjamin:你的意思是,标准不要求类对象不存在?
  • @GingerPlusPlus:在此上下文中,类对象是类型为类、结构或联合的对象。不是表示类的对象。

标签: c++ pointers void


【解决方案1】:

没有。 C++ 类是类型,而不是对象。它们在内存中没有任何位置。

(类中的函数,可能还有类的 vtable,确实存在于内存中,但没有一个位置被视为代表该类。)

【讨论】:

    【解决方案2】:

    是的,非常简单。

    class some_class {
    public:
        int Member;
    };
    
    void Function() {
        some_class SomeObject;
        void* voidPointer = &SomeObject;
    }
    

    不过,为了使用该对象的成员,您需要将指针转换回正确的类型,这需要强制转换。

    voidPointer->Member = 10;    // This line is an error
    
    some_class* SomePointer = static_cast<some_class*>(voidPointer);
    SomePointer->Member = 10;
    

    【讨论】:

    • 感谢您的示例。
    • 要明确:这里存储的是SomeObject的地址,而不是some_class
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多