Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++在类数据成员中赋值指针 我有一个C++问题。 我需要做这样的事情 class MyClass { private: MyType *T; public: MyClass (const std::vector<std::string> &S) { MyType new_obj(S); T = &new_obj; } };_C++ - Fatal编程技术网

C++在类数据成员中赋值指针 我有一个C++问题。 我需要做这样的事情 class MyClass { private: MyType *T; public: MyClass (const std::vector<std::string> &S) { MyType new_obj(S); T = &new_obj; } };

C++在类数据成员中赋值指针 我有一个C++问题。 我需要做这样的事情 class MyClass { private: MyType *T; public: MyClass (const std::vector<std::string> &S) { MyType new_obj(S); T = &new_obj; } };,c++,C++,问题是,我的新对象在构造函数末尾超出了作用域,因此*T不会成为悬空指针。 我不能这样做: MyClass (const std::vector<std::string> &S) { T = MyType new_obj(S); } 因为对于new,我们只能调用默认构造函数。如果可能的话,我宁愿不使用MyType的复制构造函数 对不起,英语不好。非常感谢,祝你度过愉快的一天 因为对于new,我们只能调用默认构造函数 胡说八道 我相信您正在寻找的代码是这样的: My

问题是,我的新对象在构造函数末尾超出了作用域,因此*T不会成为悬空指针。 我不能这样做:

MyClass (const std::vector<std::string> &S)
{
    T = MyType new_obj(S); 
} 
因为对于new,我们只能调用默认构造函数。如果可能的话,我宁愿不使用MyType的复制构造函数

对不起,英语不好。非常感谢,祝你度过愉快的一天

因为对于new,我们只能调用默认构造函数

胡说八道

我相信您正在寻找的代码是这样的:

MyClass(const std::vector<std::string> &s)
  : T(new MyType(s))
{
}

我将在这里冒险,猜测你实际上并不需要一个指针,你只是认为你需要。您之所以这么做,是因为您不知道可以调用成员对象的默认构造函数以外的构造函数。好吧,你可以,用这个


如果我的假设有误,请告诉我,我将删除此答案。

为什么您认为只能在默认构造函数中使用new?T=new MyTypeS;?或者更好的MyClassstd::vector const&S:Tnew MyTypeS{},或者更好的使用T的智能指针。为什么T首先是指针?我需要这样做。。。不,你没有。返回对局部变量的引用或指针会调用未定义的行为和/或完全的逻辑错误,并会在以后引起各种各样的乐趣…同意,只有在需要任何多态性时才需要指针。非常感谢,现在我已经了解了它的工作原理
class MyClass {
private:
    MyType T;
public:
    MyClass (const std::vector<std::string> &S)
        :T(S)
    {}
};