【发布时间】:2022-10-04 19:35:40
【问题描述】:
我遇到了以下问题。
鉴于我们有class Foo,有没有办法(trait/meta-program/trick/...)来确定(编译时间)是否有任何类会员可以做堆分配吗?
像这样的东西:
class A
{
int a = 5;
std::array<int,10> arr;
...
};
class B
{
char c;
std::string s;
...
};
can_allocate<A> 产生错误can_allocate<B> 为真
如果字符串超过小字符串优化边界,std::string 可能会进行分配。
有谁知道这种语言功能或一些自定义实现?或者它甚至无法实现?
【问题讨论】:
-
C++ 代码无法检查自身,因此(在程序本身内部)无法知道函数是否可以分配堆内存。为此,您需要其他外部静态分析器。或外部动态运行时分析器,用于您没有源代码的功能。
-
我有点希望某些特征可以在成员中进行递归搜索,并看到任何人都使用过 operator new、operator & 等。这不是痉挛,而是类似
-
您试图用这个问题解决的实际问题是什么?
-
我们需要实现一组将写入共享内存的类。因此需要扁平结构/无分配。所以我们要在编译时禁止潜在的灾难。
-
假设你有一个非最终的虚函数。对于没有看到编译时的实现,您会返回
true或false吗?
标签: c++ language-lawyer dynamic-memory-allocation traits