C++ 复制一个C++;对象的指针指向新指针
我有一个这样的指针C++ 复制一个C++;对象的指针指向新指针,c++,C++,我有一个这样的指针 MyClass *p; //MyClass is a complex class 我需要创建一个新指针,该指针的数据副本位于p所指对象的内部。复制后,我需要更改我的新对象,而不更改*p所指的对象 当我执行MyClass*q=p时,它复制指针。正确的方法是什么 我想做一些类似的事情: MyClass *q = &p; 当我现在改变由q指向的对象的属性时,我不应该影响*p处的对象 请帮我解决这个问题。如果MyClass有一个复制构造函数,那么您可以简单地从旧构造函数
MyClass *p; //MyClass is a complex class
我需要创建一个新指针,该指针的数据副本位于p所指对象的内部。复制后,我需要更改我的新对象,而不更改*p所指的对象
当我执行MyClass*q=p
时,它复制指针。正确的方法是什么
我想做一些类似的事情:
MyClass *q = &p;
当我现在改变由q指向的对象的属性时,我不应该影响*p处的对象
请帮我解决这个问题。如果
MyClass
有一个复制构造函数,那么您可以简单地从旧构造函数构造一个新构造函数,如下所示:
MyClass* p = some_function();
MyClass* q = new MyClass(*p); // use copy constructor
当然,对于这类事情,您应该使用智能指针:
std::unique_ptr<MyClass> p = some_function();
std::unique_ptr<MyClass> q = std::make_unique<MyClass>(*p); // copy constructor
std::unique_ptr p=some_函数();
std::unique_ptr q=std::make_unique(*p);//复制构造函数
如果
MyClass
是多态的,则此操作不起作用,在这种情况下,需要使用虚拟clone()
函数。首先,第二个指针需要指向与第一个对象具有相同类型的已分配内存:
Myclass *d = something(); //pointing to some object in memory
Myclass *q = new Myclass(); //allocating space in memory for the same type
然后可以使用“复制”操作符复制数据,如下所示:
(*q) = (*d)
MyClass
是否可复制?你会做MyClass a,b;a=b代码>?我如何找到它?它是由其他人创建的。说明(文档)?或者你可以试试看。你能告诉我怎么做吗it@Ron说得好。我在键入p
时错过了*
,谢谢,我会检查一下。你能推荐一本好的C++书籍吗?如果我搜索,网上有很多,但请推荐一本。@harsh这是一本推荐给初学者的书:非常感谢@GalikThank@you我得到了另一个答案,所以我没有检查这个。