我遇到了c ++问题。 我需要做这样的事情
class MyClass
{
private:
MyType *T;
public:
MyClass (const std::vector<std::string> &S)
{
MyType new_obj(S);
T = &new_obj;
}
};
问题是我的新对象在构造函数的末尾超出范围,因此* T成为悬空指针。 我不能这样做:
MyClass (const std::vector<std::string> &S)
{
T = MyType new_obj(S);
}
因为使用new()我们只能调用默认构造函数。如果可能,我更喜欢不使用MyType的复制构造函数
抱歉英语不好。非常感谢你,我祝你生日愉快
答案 0 :(得分:2)
我想在这里走出去,并猜测你实际上并不需要指针,你只是觉得你这么做。你认为你做的原因是因为你不知道你可以调用除成员对象的默认构造函数之外的构造函数。好吧,你可以使用member initializer list。
class MyClass {
private:
MyType T;
public:
MyClass (const std::vector<std::string> &S)
:T(S)
{}
};
如果我的假设出错了,请告诉我,我会删除这个答案。
答案 1 :(得分:1)
因为使用new()我们只能调用默认构造函数
无意义。
我相信您正在寻找的代码是这样的:
MyClass(const std::vector<std::string> &s)
: T(new MyType(s))
{
}