关于new注意事项

来源:互联网 发布:卡牌diy软件 编辑:程序博客网 时间:2024/05/21 10:10
/*  * 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
原创粉丝点击