繁体   English   中英

是否可以在堆上强制 C++ 类实例化?

[英]Is it possible to force c++ class instantiation on the heap?

我需要在线程应用程序中使用这个class ,所以在堆栈上实例化它显然是一个问题,有没有办法在实例化类时强制使用new

我已将构造函数private ,将new运算符设为公有,例如

public:
    void *operator new(size_t);

private:
    SomeClass(void);
    SomeClass(SomeType value); 
               .
               .
               .

但正如我在使用时预期的那样

SomeClass *heapInstance = new SomeClass(value);

编译器告诉我构造函数是私有的。

问题

  • 这个问题有方法解决吗?

注意:我到处都使用这个class ,现在我需要修复我的代码,即我需要编译器来阻止编译所以我不需要手动搜索每次出现,我不太擅长 c++ 我只是不得不使用它,因为我需要做一个 GUI 跨平台应用程序,并出于几个与此无关的原因选择了Qt

只需将 ctor 设为私有/受保护并提供静态方法来创建实例:

class HeapOnly {
     HeapOnly();
     HeapOnly( int i );
public:
     static HeapOnly *create() { return new HeapOnly; }
     static HeapOnly *create( int i ) { return new HeapOnly( i ); }
};

在一般情况下,您可以考虑返回std::unique_ptr ,但对于 Qt 而言,这可能不是必需的。

这不会立即解决您的问题,但是在创建实例的任何地方都会出现编译错误,您可以通过创建函数调用来替换它们,以捕获在堆栈上创建类实例的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM