C++ 如何将类实例(实现为pImpl)从堆栈上的局部变量复制到内存并设置指向它的指针

C++ 如何将类实例(实现为pImpl)从堆栈上的局部变量复制到内存并设置指向它的指针,c++,objective-c,c++14,C++,Objective C,C++14,我不知道如何正确地执行此操作:我有一个objective-c类,其中有一个成员变量,它指向MyOtherClass @接口MyOtherClass() ... @属性(原子)MyOtherClass*myOtherClassPtr; ... @结束 我有一个工厂函数,它按值返回MyOtherClass的实例。我想复制该值,以便myOtherClassPtr指向它。以下代码是正确的方法还是有更好的方法 @实现MyClass ... -(instancetype)初始化{ if(self=[su

我不知道如何正确地执行此操作:我有一个objective-c类,其中有一个成员变量,它指向
MyOtherClass

@接口MyOtherClass()
... 
@属性(原子)MyOtherClass*myOtherClassPtr;
...
@结束
我有一个工厂函数,它按值返回MyOtherClass的实例。我想复制该值,以便
myOtherClassPtr
指向它。以下代码是正确的方法还是有更好的方法

@实现MyClass
...
-(instancetype)初始化{
if(self=[super init]){
auto myOtherClassInstance=Factory::CreateInstance();
myOtherClassPtr=新的MyOtherClass();
//这一行应该使用复制赋值运算符,对吗?
*myOtherClassPtr=myOtherClassInstance;
}
回归自我;
}
...
仅供参考,
MyOtherClass
使用pImpl实现,并具有所有特殊成员-标题:

class-MyOtherClass-final{
公众:
显式MyOtherClass();
~MyOtherClass();
//可移动
MyOtherClass(MyOtherClass&选项)不例外;
MyOtherClass&MyOtherClass=(MyOtherClass&options)无例外;
//可复制
MyOtherClass(const MyOtherClass&);
MyOtherClass和运算符=(MyOtherClass和选项);
...
私人:
类Impl;
std::唯一\u ptr impl;
}
实施:

class MyOtherClass::Impl{
...
}
MyOtherClass::MyOtherClass():impl_(std::make_unique()){
MyOtherClass::~MyOtherClass()=默认值;
MyOtherClass::MyOtherClass(MyOtherClass&&)noexcept=默认值;
MyOtherClass&MyOtherClass::operator=(MyOtherClass&&)noexcept=默认值;
MyOtherClass::MyOtherClass(常量MyOtherClass和选项)
:impl_(std::make_unique(*options.impl_)){
MyOtherClass&MyOtherClass::operator=(MyOtherClass&options){
交换(impl\ux,options.impl\ux);
归还*这个;
}
更新1:

更好的方法(感谢@Jarod42):


myOtherClassPtr=newmyotherclass(Factory::CreateInstance());
更新2:

如果我使用智能指针而不是建议的原始指针:

@property(atomic)std::unique\u ptr myOtherClassPtr;
并对其进行初始化:

self.myOtherClassPtr = std::make_unique<MyOtherClass>(Factory::CreateInstance());
self.myOtherClassPtr=std::make_unique(Factory::CreateInstance());
我发现编译器错误:

无法分配类型为“std::unique\u ptr”的
对象,因为其复制分配运算符已隐式删除
复制构造函数已隐式删除,因为“unique\u ptr”具有用户声明的移动构造函数


这很奇怪,因为
MyOtherClass
明确声明了复制构造函数。

myOtherClassPtr=newmyotherclass(Factory::CreateInstance())但最好使用智能指针而不是原始拥有指针。似乎您使用的是C++14,因为您使用的是
std::make_unique
。谢谢@Jarrod42,我使用的是C++14,但其他类是在objective C(iOS包装器)中实现的-实现方式如下:\@property(atomic)MyOtherClass*myOtherClassPtr;我继续读下去,这样目标c中的属性(作为指针)就不能使用unique\u ptr实现,因为编译器生成setter和getter,并且它们需要复制赋值运算符,该运算符在unique\u ptr中被隐式删除。(希望正确)是可复制/可分配的。@Jarod42你是对的,它应该可以工作,但我不能。我更新了问题。我仍然在做错事。。。