我有两个指向A类全局声明的指针
A* a;
A* b;
int main(){
a = new A(...);
}
我应该如何调用复制构造函数使b成为副本的BY OF VALUE。 A类没有任何指针作为字段。
我确实声明了一个构造函数,但我可以将其删除,以便不覆盖默认构造函数。
由于
答案 0 :(得分:4)
您的代码有两个问题,需要在回答问题之前修复。
unique_ptr
或只是普通对象(除非对象是应该活得比main()
长,但这是一个奇怪的情况。)因此,在更正代码后,它看起来像这样:
int main()
{
A a;
A b(a);
}
如果您需要从代码的其他部分访问这些对象,而不明确地传递它们,请将它们放在合理命名的namespace
中:
// in header
namespace a_and_b // this is *wrong* name for it, of course
{
extern A a;
extern A b;
}
// in one of TUs - also possible to wrap this in namespace ... { ... }
A a_and_b::a;
A a_and_b::b(a_and_b::a);
当然,如果您只是要求语法,答案是:
A * b = new A(*a);
所以只需取消引用A
的{{1}}指针。但请不要这样做 - 即使在独立环境中,您也可以轻松实现自己的智能指针,以理智的方式包装它。
答案 1 :(得分:3)
只需使用new:
调用复制构造函数b = new A(*a);
我不得不问......为什么不保留两个静态物体呢?
答案 2 :(得分:1)
如果你没有声明一个你总是得到一个隐式的构造函数,你可以像StoryTeller那样调用复制构造函数和析构函数;
b = new A(*a);
如果你想在复制构造函数中做任何事情,你需要写一个,这里有一些关于你如何做到这一点:http://www.cplusplus.com/articles/y8hv0pDG/