當我嘗試編譯如下:公共新的私有構造
#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不用於堆棧對象,所以不允許在堆棧上創建對象。
您可以使用「代碼格式化」按鈕或4個空格的縮進代碼塊,而不是混淆您的代碼的html格式。 – jalf 2010-02-01 17:45:57
我試過了,我只是沒有切割和粘貼的成功。 – doron 2010-02-01 17:52:15
只是好奇,什麼是用例,導致你阻止給定類型的堆棧分配? – 2010-02-01 18:01:56