真的被unique_ptr
事物折磨了很多。
所以,我已经定义了类private
的{{1}}成员函数,如:
C
std::vector<T1> C::mem_fun(std::unique_ptr<T2>& a1,
std::vector<T1>& a2,
std::vector<T3>& a3) {
std::vector<T1> b1;
for (struct {std::vector<T1>::iterator it;
std::vector<T3>::iterator iu;}
gi = {a2.begin(), a3.begin()};
gi.it != a2.end(); ++gi.it, ++gi.iu) {
T1 b2;
...
if (...)
b2.ptr = std::move(gi.it->ptr);
else {
...
std::unique_ptr<T4> ptr(new T4()); // line 1
*ptr = *(gi.it->ptr); // line 2 -----> which causes a segfault!!!!
b2.ptr = std::move(ptr); // line 3
}
...
b1.push_back(std::move(b2));
}
return b1;
}
就像:
T1
为什么该声明会导致段错误? typedef struct T1 {
int t1_a;
double t1_b;
std::unique_ptr<T4> ptr;
} T1;
有什么问题吗?还有什么?我从某个地方听到*(gi.it->ptr)
可能会有所帮助,但事实并非如此......
我想要为第1-3行做什么基本上是复制get()
所指向的对象,并让gi.it->ptr
ptr
成员指向该副本。不确定是否有任何好的解决方案?感谢。
答案 0 :(得分:0)
T4是否为您的用例提供了有效的复制构造函数?如果是这样的话:
b2.ptr = new unique_ptr<T4>(new T4(*gi.it->ptr.get()));
会做你想做的事。