gpt4 book ai didi

c++ - 避免 `delete[]` 接受隐式指针转换?

转载 作者:行者123 更新时间:2023-12-03 07:00:25 25 4
gpt4 key购买 nike

我有一个带有指向指针的隐式转换运算符的类。解除分配该指针无效。当与 delete[] 一起使用时,我可以防止转换为指针吗?运算符(operator)?我想要一个编译时错误。对于 free函数,我可以删除将类作为参数的重载。

void foobar(double*){}

struct A {
// Please pretend I have a good reason for doing this.
operator double*() const { return nullptr; }
};

void free(A&) = delete;

int main(){
A a;

// Just works TM
foobar(a);

// This compiles :(
delete[] a;
// This does not :)
//free(a);
return 0;
}
我认为需要一些聪明的东西才能达到预期的效果。

隐式转换的一个用例:说 A实现一个作用域数组。转换使 A几乎是 alloc/dealloc 对的替代品。需要显式转换的模板和迭代器。否则类 c 函数的调用点保持不变。

最佳答案

作为一种解决方法,您可以在与 delete[] 一起使用时防止转换为指针。运算符使转换不明确。
但是,根据其余代码的情况,这可能会导致所需用例的不合需要的歧义。

struct A {
operator double*() const { return nullptr; }
operator void*() const { return nullptr; }
};

关于c++ - 避免 `delete[]` 接受隐式指针转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64562257/

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