关于new注意事项

/* 
 * File:   main.cpp
 * Author: Vicky
 *
 */

#include <memory>
#include <cstring>
#include <iostream>


class User {
public:
    User() {std::cout << "创建一个User" << std::endl;}
    User(const char* username) {strcpy(this->username,username);std::cout << "创建一个User" << std::endl;}
    virtual ~User() {std::cout << "删除一个User" << std::endl;}
    void sayHello() {std::cout << "Hello World !" << std::endl;}
    char username[20];
};


/*
 * 
 */
int main(void) {
    
//    User* pu = new User();
//    std::auto_ptr<User> u1(pu); // pu指向的内存将受u1管理,u1销毁的时候pu也会销毁。
//    u1->sayHello(); // 使用管理指针调用函数
//    std::auto_ptr<User> u2(new User()); // 这里会销毁新建的User指针指向的内存将受u2管理,u2销毁的时候pu也会销毁。
//    u2->sayHello();
    

    std::cout << "---------------------------" << std::endl;
    
    User user("Jack");
    User* puser = new(&user)User();
    std::cout << "puser->username" << puser->username << std::endl;

    User* puser2 = new(&user)User("Vicky");
    std::cout << "user.username" << user.username << std::endl;
    std::cout << "puser->username" << puser->username << std::endl;
    std::cout << "puser2->username" << puser2->username << std::endl;

    //    delete puser;
    //    delete puser2; 
    //    注意,虽然User的构造函数执行了3次,而析构函数只执行了1次,
    //    但由于3个User在内存中地址是完全相同的,由于user会被程序销毁,那么该内存空间不能被再次销毁
    //    顾,尝试delete puser;  delete puser2;  都会导致程序错误。参见p328
    
    
    return 0;
}

---------------------------
创建一个User
创建一个User
puser->usernameJack
创建一个User
user.usernameVicky
puser->usernameVicky
puser2->usernameVicky
删除一个User
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值