c++构造器

在这里插入图片描述

已经不记得怎样的操作步骤能上图左边gdb debug的样子了了,但结论是: “new User(2, name)” 被编译器g++转为以下两步:

  1. 调用 libstdc++.so.6 中的函数 operator new(unsigned long) 分配内容空间
  2. 调用用户自定义的构造函数"User(2, name)" ,注意此时入参this肯定是步骤1中分配的内存空间地址

注意以上 步骤1 和 步骤2 是平行的,即 gcc 产生了这两步 并将这两步正确的糅合到一起。
并不是 步骤1"operator new(unsigned long) " 中调用了 步骤2用户自定义构造函数
而是先做步骤1,(并将步骤1返回值 作为 入参this ) 再做步骤2

由此可见 第一件事情 是 修改 libstdc++ 中的 operator new
估计具体是 new_op.cc
如果gcc换成clang(llvm),则有可能是 new.cpp

/main.cpp
#include <iostream>

#include "User.h"
int main() {
    std::string * name=new std::string ("zhangsan");
    User * pUser=new User(2, name);
    std::cout << "user:" << pUser->getName() << std::endl;
    return 0;
}
 
/User.cpp
#include "User.h"

User::User(long _id,  std::string  * _name) : id(_id), name(_name) {

}
 
///User.h
#ifndef EXPERIMENT_USER_H
#define EXPERIMENT_USER_H


#include <string>
class User {
protected:
    long id;
    std::string* name;

public:
    User(long _id,  std::string *_name);
    ~User();
    std::string getName(){return * (this->name);}

};


#endif 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值