- 论坛徽章:
- 1
|
本帖最后由 linuxchyu 于 2014-01-10 09:18 编辑
下面是测试对象的构造、复制构造和析构功能的代码。
testobj.h:- #ifndef __TESTOBJ_H
- #define __TESTOBJ_H
- #include <iostream>
- class TestObj{
- private:
- int *p;
- public:
- TestObj(){
- p = new int(1);
- std::cout << "init p" << std::endl;
- };
- TestObj(const TestObj & obj){
- p = new int(1);
- std::cout << "copy p" << std::endl;
- };
- ~TestObj(){
- if (p != NULL){
- delete p;
- p = NULL;
- std::cout << "delete p , p="<< p<< std::endl;
- }
- };
- };
- #endif
复制代码 test.cc:- #include <iostream>
- #include <vector>
- #include <windows.h>
- #include "testobj.h"
- using namespace std;
- int main(){
- vector<TestObj> objvector;
- TestObj obj1;
- objvector.push_back(obj1);
- Sleep(1000);
- cout << "------------" << endl;
- TestObj obj2;
- objvector.push_back(obj2);
- Sleep(1000);
- cout << "------------" << endl;
- TestObj obj3;
- objvector.push_back(obj3);
- Sleep(1000);
- cout << "------------" << endl;
- }
复制代码 运行输出结果是:
init p
copy p
------------
init p
copy p
delete p , p=00000000
copy p
------------
init p
copy p
copy p
delete p , p=00000000
delete p , p=00000000
copy p
------------
delete p , p=00000000
delete p , p=00000000
delete p , p=00000000
delete p , p=00000000
delete p , p=00000000
delete p , p=00000000
现在的问题是,为什么会多出了三个复制构造?按道理来说应该是3次普通的对象创建,和三次对象的复制构造啊,为什么会多出了3次对象的复制构造?求高手解答! |
|