c++ - 仅在堆栈上构造的类;不带新的。 C++

标签 c++

有没有办法创建类 Foo

这样我就可以:

Foo foo;

但不是

Foo* foo = new Foo(); 

?

我不希望人们能够在堆上分配 Foo 的拷贝。

谢谢!

编辑:抱歉,我在“仅堆栈,而非堆”上错了。我想说的是“不能用new运算符”。

最佳答案

不可能阻止在堆上创建对象。总有办法解决它。即使您设法为 Foo 隐藏 operator new,您也可以随时执行以下操作:

#include <new>

struct Foo {
        int x;
private:
        void* operator new (std::size_t size) throw (std::bad_alloc);
};

struct Bar
{
    Foo foo;
};

int main()
{
    Bar* bar = new Bar;
    return 0;
}

嘿,转眼之间,堆上就有一个 Foo。

关于c++ - 仅在堆栈上构造的类;不带新的。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301839/

相关文章:

android - 如何在 Android NDK 项目中包含二进制文件?

c++ - 类链中的转换

c++ - 声明嵌套 namespace `std`是否合法?

c++ - 类型为 : how to do this? 的模板化数组的 alloca()

c++ - 为什么这里的默认构造函数不是 constexpr?

c++ - 为什么 THREAD_MODE_BACKGROUND_BEGIN 导致我的代码运行速度比 THREAD_PRIORITY_LOWEST 慢 20 倍?

c++ - 如何在 C++ 中应用两个列表之间的交集?

c++ - 无法打开共享对象文件 : No such file or directory; Running or Debugging in Eclipse

c++ - 为什么不能像指针一样返回 const 引用?

c++ - 在 Visual Studio 2010 C++ 中使用 .dll