【发布时间】:2019-08-22 07:58:33
【问题描述】:
我创建了一个带有构造函数的类。
我正在 main.cpp 中创建 n 个 个对象。现在每次创建对象时,都应该自动调用构造函数。
但是由于我是在main.cpp 中创建这个对象,所以我想使用信号来处理“Ctrl+C”终止。
我已经这样写了main.cpp:
#include <iostream>
#include "Session.hpp"
class Session {
public:
Session(int _count):count(_count) {
std::cout << "Create Session " << count << std::endl;
}
~Session() {
std::cout << "Destroy Session " << count << std::endl;
}
Print() {
cout << "Hello" << endl;
}
private:
const int count;
};
void signal_handler(int signal, unsigned int count, **WHAT SHOULD I WRITE HERE**) {
for (unsigned int del_count = 0; del_count < count; del_count++) {
**I WANT TO DELETE ALL THE FOO OBJECTS CREATED IN THE MAIN FUNCTION**
}
}
int main() {
unsigned int num_of_sessions;
cin >> num_of_sessions;
signal(SIGINT, signal_handler, num_of_sessions, **WHAT MORE SHOULD I PASS HERE**);
unique_ptr<Session> Foo[num_of_sessions];
unsigned int count = 0; // initialize the counter for sessions
while (count < num_of_sessions) {
Foo[count] (new Session(count));
count++;
}
while (true){
for (count = 0; count < num_of_sessions; count++) {
Foo[count]->PrintName();
}
}
return 0;
}
我收到此错误
错误:对“(std::unique_ptr) (Session*)”的调用不匹配
Foo[count] (new Session(count));
有什么建议吗?
【问题讨论】:
-
是的。 Foo[count].reset(new Session(count));
-
在您的信号处理函数中,您可以设置一个标志,供您的无限循环检查。如果设置则循环中断,
main函数结束,这将破坏Foo数组中的所有对象,这将删除指针并破坏Session对象。 -
至于您的构建错误,这与信号处理程序问题非常不同,应该作为一个单独的问题提出,这不是您构建 any 对象的方式。
-
@Someprogrammerdude
you could set a flag that your infinite loop checks你能推荐任何实现这个的例子吗? -
std::atomic<bool> end_infinite_loop = false; void signal_handler(int) { end_infinite_loop = true; } ... int main() { ... while (!end_infinite_loop) { ... } }
标签: c++ class oop constructor unique-ptr