我有一個項目,嚴格控制什麼和如何分配內存。我有一個可以分配在堆上的事物的基類,對於operator new
和operator delete
及其數組變量,有靜態過載。這些工作完全沒有任何警告。靜態成員放置刪除簽名?
有一切的最終基類只放置新的允許:
class Object
{
public:
static void* operator new(size_t, void*);
static void* operator new[](size_t, void*);
static void operator delete(void*, void*);
static void operator delete[](void*, void*);
};
的實現是微乎其微的,在相應的.cpp文件。 operator new
s返回指針,operator delete
s不做任何事情。
當我在VS2015下編譯這個時,使用new (ptr) DerivedFromObject()
會產生以下警告。異常處理設置爲/EHa
。
warning C4291: 'void *Object::operator new(std::size_t,void *)': no matching operator delete found; memory will not be freed if initialization throws an exception
我試着簽名瞎搞:添加noexcept
,加入size_t
到operator delete
但似乎沒有任何工作。什麼是靜態成員放置的正確形式operator delete
?
它應該是你所定義的http://en.cppreference.com/w/cpp/memory/new/operator_delete – StoryTeller
我還必須指出,我不能重現你的錯誤http://rextester.com/OHB53375 – StoryTeller
如果我嘗試放置一個對象,它對我很有用,它只是導致警告的派生類。儘管警告的確引用了Object的操作符。 – lcsondes