【发布时间】:2016-02-23 17:28:09
【问题描述】:
我是 C++ 的学习者。我已经编译了以下程序。我正在研究构造函数和析构函数的概念。我在下面有这段代码,我在其中声明了一个私有析构函数并使用 main() 中的类的成员函数访问私有成员。我知道可以声明私有构造函数,但公共构造函数也是强制性的吗?下面是我的代码:
class Book
{
private:
int *pages;
int *price;
Book() //default constructor
{
pages = new int;
price = new int;
*pages = 300;
*price = 8;
}
public:
void pre_destructor()
{
std::cout << "The pages:" << *pages << "\n";
std::cout << "The price:" << *price << "\n";
}
~Book() //destructor
{
std::cout << "The pages:" << *pages << "\n";
std::cout << "The price:" << *price << "\n";
delete pages;
delete price;
}
};
int main()
{
using namespace std;
Book book1;
cout << "Before using destructors" << endl;
cout << "---------------------------------"<< endl;
book1.pre_destructor();
cout << "After using destructors" << endl;
cout << "---------------------------------";
return 1;
}
对于上述程序,显示了两个错误。一个是在声明对象的主函数中;错误:内容中的错误。第二个在调用构造函数的那一行;错误:Book::Book() 是私有的。
主要不是直接访问代码中的构造函数。那为什么会显示访问错误呢?
【问题讨论】:
-
将构造函数声明为私有不会让对象在其他范围内被创建。由于不能从那里调用构造函数。所以构造函数/析构函数是公开的!
-
你需要得到a good book。
-
The main is not directly accessing the constructor in the code.也是。Book book1;行使用其默认构造函数初始化对象(您将其设为私有,因此无法访问)。 -
停止使用新的和删除的。这里真的需要动态内存分配吗? main 应该返回 0。为什么要从析构函数访问数据成员?
-
@PravasiMeet:并不是说在析构函数中访问数据成员有什么问题……
标签: c++ c++11 constructor destructor dynamic-memory-allocation