我不知道如何为具有多个原始指针的对象创建构造函数。我了解如何制作一个但不了解多个。
我曾尝试在初始化期间编写一个新的构造函数,然后指定从捐赠者对象访问的内容。
我想知道一种方法来制作多个构造函数,这些构造函数根据初始化顺序从一个对象中提取不同的 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/