/*
* 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