Scott Meyers的Effective C ++第6页中定义了“复制构造函数”这个术语。 我一直使用Schiltdt的书作为我的参考,我可以发现没有提到复制构造函数。 我明白了,但这是c ++的标准部分? 这样的构造函数在按值传递类时会被调用吗?
我对C ++的了解是,全局实例的构造(和破坏)的顺序不应该被假定。 当我用构造函数和析构函数中使用std::cout的全局实例编写代码时,我有一个问题。 std::cout也是iostream的一个全局实例。 std::cout保证在任何其他全局实例之前被初始化? 我写了一个简单的testing代码,它完美的工作,但我仍然不知道为什么。 #include <iostream> struct test { test() { std::cout << "test::ctor" << std::endl; } ~test() { std::cout << "test::dtor" << std::endl; } }; test t; int main() { std::cout << "Hello world" << std::endl; return 0; } 它打印 test::ctor Hello world test::dtor 有没有可能的代码不按预期运行?
我注意到编译器错误types'…'没有定义生成的构造函数,当我错误地尝试实例化一个particilar类。 这让我想知道如何去写自己的class级,当有人企图实例化这个消息的时候,我会这样做。 所以下面的代码,我需要做什么MyClass ? namespace MyNamespace { class Program { static void Main(string[] args) { MyClass mc = new MyClass(); } } class MyClass { MyClass() { } } }
我想要的是: obj = Foo.new(0) # => nil or false 这不起作用: class Foo def initialize(val) return nil if val == 0 end end 我知道在C / C ++ / Java / C#中,我们不能在构造函数中返回一个值。 但是我想知道在Ruby中是否可能。
是否有可能使用子类的构造函数的初始化列表初始化在父类中声明为受保护的数据成员? 我无法得到它的工作。 我可以解决这个问题,但是如果我不需要的话,那将会很好。 一些示例代码: class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") { } }; 当我尝试这样做时,编译器告诉我:“class'Child'没有任何名称为”something“的字段。 是这样的可能吗? 如果是这样,语法是什么? 非常感谢!
在我正在阅读的书中( C ++ Without Fear ),它说如果你没有为一个类声明一个默认的构造函数,那么编译器会为你提供一个,它将“清除每个数据成员”。 我已经试验过了,我没有看到任何调零行为。 我也找不到在Google上提到的任何内容。 这只是一个特定编译器的错误或怪癖吗?
可能重复: 使用new和without实例化一个对象有什么不同 这可能是一个基本的问题,可能已经被问到了(比如这里 )。 但我仍然不明白。 所以,让我问一下。 考虑下面的C ++类: class Obj{ char* str; public: Obj(char* s){ str = s; cout << str; } ~Obj(){ cout << "Done!\n"; delete str; // See the comment of "Loki Astari" below on why this line of code is bad practice } }; 下面的代码段有什么区别: Obj o1 ("Hi\n"); 和 Obj* o2 = […]
我试图创build一个这样的date: date = new Date(year-1900,mon-1,day,hrs,min,sec); Eclips给了我这个警告:“构造函数Date(int,int,int,int,int)已被弃用”。 对于一个构造函数是什么意思呢? 我能做什么?
class A { public: A(); private: char a[5]; int* ptr; }; A::A() : a(0), ptr(0) { } 这是正确的吗?
我有这样的代码: class MapIndex { private: typedef std::map<std::string, MapIndex*> Container; Container mapM; public: void add(std::list<std::string>& values) { if (values.empty()) // sanity check return; std::string s(*(values.begin())); values.erase(values.begin()); if (values.empty()) return; MapIndex *mi = mapM[s]; // <- question about this line if (!mi) mi = new MapIndex(); mi->add(values); } } 我主要关心的是mapM [s]expression式是否将返回引用空指针,如果新项目添加到地图? SGI文档说: data_type&operator [](const key_type&k)返回与特定键相关联的对象的引用。 如果地图尚未包含这样的对象,则operator []将插入默认对象data_type()。 […]