【发布时间】:2012-10-25 07:51:34
【问题描述】:
我正在做一个测试,检查是否所有类属性都在构造函数中初始化。 我当前的解决方案适用于非指针属性:
void CSplitVectorTest::TestConstructorInitialization()
{
const size_t memorySize = sizeof(CSplitVector);
char* pBuffer1 = (char*) malloc(memorySize);
char* pBuffer2 = (char*) malloc(memorySize);
memset(pBuffer1,'?',memorySize);
memset(pBuffer2,'-',memorySize);
new(pBuffer1) CSplitVector;
new(pBuffer2) CSplitVector;
const bool bObjectsAreEqual = memcmp(pBuffer1,pBuffer2,memorySize)==0;
if (!TEST(bObjectsAreEqual))
{
COMMENT("Constructor initialization list not complete!");
}
free(pBuffer1);
free(pBuffer2);
}
您知道如何改进测试指针是否已初始化吗?
【问题讨论】:
-
你的方法行不通。编译器可能会在数据成员之间插入填充。
-
@Lol4t0:未被任何数据成员占用的字节将在第一个缓冲区中保留
?,在第二个缓冲区中保留- -
指针不能用是什么意思?
-
@Marek 啊,当然。在下面增加了我的答案(最后一段)。
-
对于指针,只要我可以使用智能指针,否则我有受控变量的安全指针:snapwebsites.org/project/controlled-vars 我也将它用于所有基本数据类型(int、char 等)这样,无论如何,一切都会被初始化。特别是,如果您将变量标记为“需要初始化”,那么您必须在您的类中有一个初始化程序。所以你不会错过的。
标签: c++ unit-testing