【发布时间】:2012-07-20 19:54:15
【问题描述】:
#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;
}
此代码可以完美运行,不会出现任何错误泄漏。但是我希望能够获得 void* 所保留的对象的大小。我想有一种方法,因为 delete 语句知道对象 v1 指向的大小,以便它可以删除它所以它必须存放在某个地方。
【问题讨论】:
-
简短回答:你不能。您需要自己跟踪尺寸。
-
它存储在“某处”——对你来说完全不透明。故意这样。想知道大小,需要自己去追踪。
-
将
delete应用于void *指针在C++ 中一直是非法的。您的代码甚至不应该编译。 (虽然令我惊讶的是,Comeau Online 编译器在void *上接受delete。) -
@AndreyT 在这里可能有正确的答案;我确实收到了来自
clang的警告。我根本不是 C++ 专家,所以无法直接确认或反驳。 -
@Caesar - 根据语言,这段代码并不能真正工作,只是 似乎工作 是未定义行为的一种可能结果。
标签: c++ sizeof void-pointers