class A
{
int a = 100;
};
Run Code Online (Sandbox Code Playgroud)
和
class A
{
int a;
public :
A()
{
a = 100;
}
};
Run Code Online (Sandbox Code Playgroud)
我知道有两种方法,因为静态变量在类外部初始化,并且不能在类中完成.但是如果我使用构造函数或在声明本身期间初始化变量a(一个普通的int),它会有什么不同.
当我向我的类创建共享ptr时,我遇到了类析构函数被调用两次的问题.
我正在尝试创建一个对象向量,每个对象都有一个构造函数和一个析构函数.
当我打电话时,例如:
std::vector<std::shared_ptr<ServoController>> servos;
bool CreateServo(int id)
{
std::shared_ptr<ServoController> servo = std::make_shared<ServoController>(ServoController(id));
servos.push_back(servo);
}
Run Code Online (Sandbox Code Playgroud)
调用ServoController的构造函数,然后立即调用Destructor for ServoController,之后甚至调用push_back函数.
然后,当我关闭我的应用程序时,再次调用ServoController的析构函数.但是构造函数到目前为止只被调用过一次(我在向量中只有一个对象).至少它不应该使构造函数再次运行?
有什么方法可以创建我的类的向量,并且对于向量中的每个对象,构造函数应该被调用一次,并且当从向量中移除对象或者向量被销毁时,应该调用析构函数一次吗?
感谢:D
使用stringstream提取自句话.
每个单词都添加了换行符,我看不出原因; 你能?谢谢你的帮助.基思:^)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
int main() {
int wordCount(9);
std::vector<std::string> v(wordCount);
std::vector<std::string>::iterator it;
std::string tStr;
std::string myStr = "the quick fox jumped over the lazy brown dogs";
std::stringstream ss(myStr);
std::cout << "Sentence broken into vector:" << std::endl;
for (int i=0; i<wordCount; ++i) {
ss >> tStr;
v.push_back(tStr);
}
for (it=v.begin(); it != v.end(); ++it)
std::cout << *it << std::endl;
std::cout << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译,运行和输出.注意额外的换行符.
pickledEgg $ g++ …Run Code Online (Sandbox Code Playgroud)