具有多个原始指针的 C++ 构造函数

标签 c++ constructor copy-constructor object-initializers raw-pointer

我不知道如何为具有多个原始指针的对象创建构造函数。我了解如何制作一个但不了解多个。

我曾尝试在初始化期间编写一个新的构造函数,然后指定从捐赠者对象访问的内容。

我想知道一种方法来制作多个构造函数,这些构造函数根据初始化顺序从一个对象中提取不同的 l 值,但是,我找不到有关如何执行此操作的信息。我在下面有一些例子。

class Movie {
   publuc:
   std::string *movie_name;
   std::string *age_rating; 
   int *view_count;
   int *rating;
Movie::Movie(const Movie &source , const Movie &source , const Movie &source , const Movie &source)
    : {movie_name = new string;
      *movie_name source;},
      {age_rating = new string;
      *age_rating source;}, 
      {view_count = new int;
      *view_count source;},
      {source.rating = new int;
      *source.rating source;}

我不知所措,我知道我遗漏了一些东西,因为这个问题必须是可以解决的。无论你身在何处,请帮助我掌握 C++。

最佳答案

你根本不应该在这里使用原始指针。没有理由。这只是一个犯错误的邀请。

其次,你的初始化语法非常糟糕,这根本不是语法的工作原理。我将在这里放一个初始化器应该是什么样子的例子,这样你就可以看到了。您还误解了 new 的作用。你不需要任何你正在做的任务。没有之一。

此外,您将 public 拼错为 publuc。并且您声明构造函数的方式对于将其声明为类成员而言是不正确的。

您知道,几乎所有您遇到的问题,编译器都应该至少给您一些模糊合理的错误消息,您不应该需要我们为您修复它们。

这是一个使用一些指针成员的示例类。请注意,如果您使用指针成员,尤其是作为 C++ 初学者,您几乎可以肯定做错了什么。裸指针应该是您在 C++ 中学习的最后一件事,而不是第一件事:

class IHaveSomePointers {
 public:
   IHaveSomePointers(bool const &mybool, int const &myint)
      : mybool_{new bool(mybool)}, myint_{new int(myint)}
   { }
   ~IHaveSomePointers() {
       delete mybool_;
       delete myint_;
   }
   IHaveSomePointers(IHaveSomePointers const &) = delete;
   void operator =(IHaveSomePointers const &) = delete;

 private:
   bool *mybool_;
   int *myint_;
};

这门课确实有一个问题。如果 myint_ 的分配抛出异常,就会发生内存泄漏。这种事情就是为什么你不在 C++ 中使用原始指针,尤其是对于成员变量,尤其是当它们将要指向的东西是用 new 分配的时候。

我删除了复制构造函数和赋值运算符,因为它们需要对包含原始指针的类进行特殊实现。我注意到您似乎一直在尝试定义自己的复制构造函数,但很难说清楚,因为您的构造函数声明非常乱码。

这个类应该这样写:

class IDontHavePointersBecauseThatsBad {
 public:
    IDontHavePointersBecauseThatsBad(bool const &mybool, int const &myint)
       : mybool_{mybool}, myint_{myint}
    { }

 private:
    bool mybool_;
    int myint_;
 };

如果你绝对必须动态分配东西,这样做:

 #include <memory>

 class ForSomeBizarreReasonIDyanmicallyAllocate {
  public:
    ForSomeBizarreReasonIDynamicallyAllocate(bool const &mybool, int const &myint)
        : mybool_{::std::make_unique<bool>(mybool)},
          myint_{::std::make_unique<int>(myint)}
    { }

  private:
    ::std::unique_ptr<bool> mybool_;
    ::std::unique_ptr<int> myint_;
 };

该类不需要析构函数来确保它删除它分配的内存。它没有潜在的内存泄漏。一切都围绕着更好的类(class)。

关于具有多个原始指针的 C++ 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56677560/

相关文章:

c++ - 字符指针和字符串的大小

c++ - 在构造函数之后立即调用析构函数

c++ - 智能指针与初始值设定项列表混淆

c++ - 减少复制构造函数调用

c++ - NAPI AsyncWorker:在不使用大 for 的情况下将指针数组转换为 Napi::Array?

c++ - 使用 boost 标记化给出相同的输出

java - 为内部子接口(interface)创建 "default constructor"

c++ - 从基类对象创建派生类

c++ - 如何找到用于在屏幕上绘制像素并在鼠标单击时返回它们的坐标

c# - 断言子类调用的特定构造函数