本文介绍了私有构造函数和新运算符重载。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的专家,


我想创建一个只能在堆上创建对象的类。

我使用了以下方法。


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





这篇关于私有构造函数和新运算符重载。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-01 10:41