复制C++中动态对象的构造函数
Copy constructor for dynamic object in C++
我想要一种关于复制构造函数的方法
class A {
int *a;
public :
A():a(0){
a = new int;
*a =0;}
A (const A & ob) {
cout<<"In side copy constructor ..."<<endl;
a = new int;
*a = *ob.a;
}
~A() { cout <<"IN side destructor ..."<<endl;delete a;}
void setdata(int ip) { *a = ip;}
int getdata() { return *a;}
};
int main() {
A *dob1 = new A();
dob1->setdata(5);
A sob1= *dob1; //copy constructor gets called;
//but for this case copy constructor will not be called
// how should i write copy constructor for this case
A *dob2 = dob1; //whether copy constructor will be called or not
cout<<endl;
cout<<" dob1 data "<< dob1->getdata()<<endl;
cout<<" sob1 data " << sob1.getdata()<<endl;
cout<<" dob2 data "<< dob2->getdata()<<endl;
delete dob1;
return 0;
}
因此,在这种情况下,将调用如何创建副本构造函数。
请回复我。
在A *dob2 = dob1;
中,对象不被复制,指针是.
CCD_ 2是一个完全不同的类型。指针dob2
将指向dob1
,但它本身不是对象,因此不要期望调用复制构造函数。
如果执行A* dob2 = new A(dob1);
,将调用复制构造函数,创建一个对象,dob2
将指向它,但它仍然不是对象本身,而是一个指针。
使用原始指针处理动态内存非常麻烦。更好的方法是使用像std::vector, std::deque
这样的STL容器,或者使用像std::unique_ptr, std::shared_ptr
这样的智能指针来处理动态内存。
如果有人真的想知道如何通过复制构造函数使用另一个现有的动态对象来创建一个新的动态对象,那么看看下面的代码。小心使用!
class A {
public:
A() : a{ new int {0} } { std::cout << "Inside default constructor ..." << endl;}
A(const A& ob) {
std::cout << "Inside copy constructor ..." << endl;
a = new int;
*a = *ob.a;
}
~A() {
std::cout << "Inside destructor ..." << endl;
delete a;
a = nullptr;
}
void setdata(int ip) { *a = ip; }
int getdata() { return *a; }
private:
int* a;
};
int main() {
// Dynamic Object - 1
A* dob1 = new A(); // Calls default constructor
dob1->setdata(5);
// Stack Object - 1
A sob1 = *dob1; // Calls copy constructor
// Dynamic Object - 2
A* dob2 = new A(*dob1); // Calls copy constructor
cout << " dob1 data " << dob1->getdata() << endl;
cout << " sob1 data " << sob1.getdata() << endl;
cout << " dob2 data " << dob2->getdata() << endl;
delete dob2;
delete dob1;
}
输出:
Inside default constructor ...
Inside copy constructor ...
Inside copy constructor ...
dob1 data 5
sob1 data 5
dob2 data 5
Inside destructor ...
Inside destructor ...
Inside destructor ...
相关文章:
- 对象实例化调用构造函数的次数太多
- Arduino C++在构造函数中用参数声明对象数组
- 模板,函数使用错误的构造函数来复制我的对象
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 通过构造函数创建的所有对象都具有相同的向量
- 是什么让放置新调用对象的构造函数?
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- C++ 对象指针数组的复制构造函数
- 在构造函数中输入对象时C++类成员作用域
- C++:将初始化的对象传递给另一个类的构造函数;需要不必要的构造函数吗?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 如何从构造函数副本 T(const T&)调用对象 T?
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 如何将我编写的对象传递到另一个类的构造函数中?
- 使用向量初始化参数化构造函数的对象数组
- 在C++中将对象从另一个类传递到另一个类的构造函数?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 构造函数对象赋值是否泄漏内存
- gcc中不可移动构造函数对象的std::函数