【发布时间】:2010-02-01 17:41:42
【问题描述】:
当我尝试编译以下内容时:
#include <iostream>
class Test
{
public:
void* operator new (size_t num);
void operator delete (void* test);
~Test();
private:
Test();
};
Test::Test()
{
std::cout << "Constructing Test" << std::endl;
}
Test::~Test()
{
std::cout << "Destroying Test" << std::endl;
}
void* Test::operator new (size_t num)
{
::new Test;
}
void Test::operator delete(void* test)
{
::delete(static_cast<Test*>(test));
}
int main()
{
Test* test = new Test;
delete test;
}
我明白了:
$ g++ -o test test.cpp
test.cpp: In function ‘int main()’:
test.cpp:14: error: ‘Test::Test()’ is private
test.cpp:36: error: within this context
如果new是成员函数,为什么不能调用私有构造函数?
编辑: 我的想法是创建一个只能使用完全标准语法在堆上实例化的类。我希望由于 new 是一个数据成员,它可以调用私有构造函数,但是由于 new 不用于堆栈对象,因此不允许您在堆栈上创建对象。
【问题讨论】:
-
不要乱用 html 格式为您的代码,只需使用“代码格式”按钮,或使用 4 个空格缩进代码块。
-
我试过了,只是剪切和粘贴没有成功。
-
只是好奇,是什么用例导致您阻止给定类型的堆栈分配?
标签: c++