问题描述
亲爱的专家,
我想创建一个只能在堆上创建对象的类。
我使用了以下方法。
class ss
{
ss(){}
public:
void * operator new(size_t sz)
{
cout<<" in new"<< endl;
return新字符[sz];
}
无效操作符删除(void * m)
{
免费( m);
}
};
int main()
{
ss * s =新ss;
返回0;
}
但是当我这样做
ss * s =新ss;
编译器抱怨构造函数ss :: ss()是私有的。
作为运算符的新函数是类的成员所以编译器不应该抱怨
抱怨,因为operator new函数可以调用默认的
构造函数,即使它是私有的。
我是惊讶和困惑。
建议会有很大的帮助。
问候,
Siddharth
Dear Experts,
I want to make a class whose objects can be created only on heap.
I used the following approach.
class ss
{
ss(){}
public:
void* operator new(size_t sz)
{
cout<<"in new"<<endl;
return new char[sz];
}
void operator delete(void* m)
{
free(m);
}
};
int main()
{
ss* s = new ss;
return 0;
}
But when I do
ss* s = new ss;
compiler complains that constructor ss::ss() is private.
As operator new function is member of class so compiler should not
complain because operator new function can call the default
constructor even if it is private.
I am surprised and confused.
Suggestions would be of great help.
Regards,
Siddharth
推荐答案
//抱歉.....我的
错误
//sorry..... my
mistake
//抱歉.....我的
错误
//sorry..... my
mistake
//抱歉.....我的
错误
//sorry..... my
mistake
这篇关于私有构造函数和新运算符重载。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!