获取对象void*的大小指向

Cae*_*sar 2 c++ sizeof void-pointers

#define BOOST_TEST_MODULE MemoryLeakTest
#include <boost/test/unit_test.hpp>

#include <iostream>
using namespace std;

BOOST_AUTO_TEST_CASE( MemoryLeakTest)
{
    double* n1 = new double(100);
    void* v1 = n1;
    cout << sizeof(v1) << endl;
    delete v1;
}
Run Code Online (Sandbox Code Playgroud)

此代码将完美地工作,没有任何错误泄漏.但是我希望能够得到对象的大小.void*我会想象有一种方法,因为delete语句知道对象v1指向的大小,以便它可以删除它所以它必须存储一些地方.

AnT*_*AnT 5

应用delete到void *C++中的指针是非法的.

如果您的编译器支持此作为非标准扩展,那么很可能delete假定该指针指向的未知对象具有普通的析构函数.在这种情况下delete,除了立即将控件移交给原始内存释放函数::operator delete(可能只是调用)之外,不必执行任何操作free.(当然,最后一点可能取决于实现).

所以,你的问题基本归结为"如何确定malloc-ed内存块的大小".没有标准功能可以做到这一点.在分配时自己记住大小.如果您的平台提供了任何此类功能,请使用非标准的特定于实现的库功能.

在一些实现中,这可以通过msize功能来完成.但同样,为了做到有意义,你必须首先研究你的实现.你需要弄清楚内存是如何分配的new和/或究竟是什么delete v1,因为它不是标准的C++.