加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何在新呼叫中使用更多参数?

发布时间:2020-12-16 10:25:41 所属栏目:百科 来源:网络整理
导读:对不起,如果“新呼叫”不是C -term.如果不是,请告诉我什么是正确的术语.我是一名以C开头的C程序员.我有结构A,我想在new运算符中使用参数化器初始化它.像这样: A * a =新A(foo,baa); 所以,我试着用它来定义函数:void * A :: operator new(T a,T B){…} 但我
对不起,如果“新呼叫”不是C -term.如果不是,请告诉我什么是正确的术语.我是一名以C开头的C程序员.我有结构A,我想在new运算符中使用参数化器初始化它.像这样:

A * a =新A(foo,baa);

所以,我试着用它来定义函数:void * A :: operator new(T a,T B){…}

但我得到一个编译器错误:

error: 'operator new' takes type size_t ('unsigned int') as first parameter

另外,不确定它是否相关但是已经定义了size_t类型的重载参数的函数,如下所示:

void * A :: operator new(size_t size){…}

解决方法

您需要区分new运算符和构造函数:new运算符不会执行或多于malloc(),它们会分配一堆内存.然后构造函数初始化该内存slap,使其成为A类型的有效对象.

您的困惑源于这样一个事实:new关键字同时执行,分配和构造.这条线

A* foo = new A(...);

首先调用一个新的运算符来获取内存,然后调用相应的构造函数,传递给定的参数,以构造对象.

因此,正如其他人已经指出的那样,您需要添加一个带有所需参数的构造函数,而不是新的运算符:

class A {
public:
    A(int arg1,int arg2);
    int member1,member2;
};

A::A(int arg1,int arg2) : member1(arg1),member2(arg2) {
    //Do additional stuff that cannot be achieved by calling the constructors of the members alone.
}

注意,在此代码中,您在初始化列表中显式调用A的数据成员的构造函数(在:和{之间的部分).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读