gpt4 book ai didi

c++ - 如何从 void* 测试类

转载 作者:行者123 更新时间:2023-11-27 23:08:50 26 4
gpt4 key购买 nike

假设有以下 API:

CClassA(const CClassA& inCCA);
CClassA(void *inData);

我们如何确保没有人使用指向 CClassA 的指针调用 void* 构造函数对象,即检测像 CClassA *instance; new CClassA(instance) 这样的调用?

我想在 (void) 构造函数中检查 - 并抛出错误 - 如果 API 使用不正确,但是 dynamic_cast不适用于原始 void*,因为编译器(至少 clang 是这样)提示:
'void 不是类'

测试时if (dynamic_cast<CClassA*>(inData) != NULL) .

以下编译 - 但它是否有意义,即它是否是一个有效且正确的构造并且将始终在运行时正确评估......?

if (dynamic_cast<CClassA*>( (CClassA*)inData ) != NULL)

最佳答案

添加私有(private)构造函数:

private:
CClassA(CClassA *forbidden);

你将无法编译:

 error: calling a private constructor of class 'CClassA'
CClassA *instance; new CClassA(instance);

编辑:

既然你提到了C++11标签,你可以删除它:

    CClassA(CClassA *forbidden) = delete;

这会触发一个不同的编译时错误:

error: call to deleted constructor of 'CClassA'
CClassA *instance; new CClassA(instance);
^ ~~~~~~~~
note: 'CClassA' has been explicitly marked deleted here
CClassA(CClassA *) = delete;

关于c++ - 如何从 void* 测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com