小编Mik*_*l F的帖子

这两种方法有什么区别?

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),它会有什么不同.

c++ class c++11 c++14

2
推荐指数
1
解决办法
127
查看次数

创建shared_ptr时,类析构函数被调用两次

当我向我的类创建共享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

c++

2
推荐指数
1
解决办法
909
查看次数

为什么std :: cout会在输出中添加return或换行符?

使用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)

c++ vector stringstream

1
推荐指数
1
解决办法
184
查看次数

标签 统计

c++ ×3

c++11 ×1

c++14 ×1

class ×1

stringstream ×1

vector ×1