我不确定初始化是类的成员的shared_ptr的好方法。 你能告诉我,在C::foo()select的方式是好还是有更好的解决scheme? class A { public: A(); }; class B { public: B(A* pa); }; class C { boost::shared_ptr<A> mA; boost::shared_ptr<B> mB; void foo(); }; void C::foo() { A* pa = new A; mA = boost::shared_ptr<A>(pa); B* pB = new B(pa); mB = boost::shared_ptr<B>(pb); }
我已经看到人们在类中为成员variables使用尾部下划线,例如着名的C ++ FAQ Lite 。 我认为它的目的不是将variables标记为成员,这就是“m_”的用途。 它的实际目的是使得像这个字段这样命名的访问器方法成为可能: class Foo { public: bar the_bar() { return the_bar_; } private: bar the_bar_; } 有访问者省略“get_”部分在STL和boost中很常见,我试图尽可能地开发一种编码风格,但是我不能用下划线技巧来看到它们。 我无法在STL中find一个访问器,或者只是返回一个私有variables。 我有几个问题希望你能回答: 这个惯例从哪里来? 短暂聊天? Objective-C的? 微软? 我在想。 我会使用尾部下划线为所有私人成员或只是作为一种解决方法,以防我想命名一个函数像variables? 你可以指向我的STL或增强代码,演示成员variables的尾部下划线? 有谁知道Stroustrup对这个问题的看法是什么? 你能指点我进一步讨论这个问题吗?
在C ++中,为什么private是类成员的默认可见性,而public是结构体?
我有一个页面,在执行某个任务之前检查用户是否处于特定angular色,并且对function没有任何问题,并且没有对所涉及的代码进行明显的相关更改。 该站点位于运行IIS 7.0的开发计算机(Windows Vista)上,数据库在单独的服务器上是MS SQL 2005。 突然,所有对User.IsInRole调用都会导致 System.Threading.SemaphoreFullException:将指定的计数添加到信号量将导致它超过其最大数量。 我确定重新启动IIS将“解决”这个问题,但我想了解是什么导致了它,所以我可以确保它不会发生在我的生产站点。 堆栈跟踪的顶部是: [SemaphoreFullException:将指定的计数添加到信号量将导致它超过其最大计数。] System.Threading.Semaphore.Release(Int32 releaseCount)+6065293 System.Data.ProviderBase.DbConnectionPool.PutNewObject(DbConnectionInternal obj)+57 System。 Data.ProviderBase.DbConnectionPool.DeactivateObject(DbConnectionInternal obj)+338 System.Data.ProviderBase.DbConnectionPool.PutObject(DbConnectionInternal obj,Object owningObject)+163 System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject,DbConnectionFactory connectionFactory)+117 System .Data.SqlClient.SqlInternalConnection.CloseConnection(DbConnection owningObject,DbConnectionFactory connectionFactory)+37 System.Data.SqlClient.SqlConnection.Close()+158 System.Web.DataAccess.SqlConnectionHolder.Close()+25 System.Web.Security.SqlRoleProvider .GetRolesForUser(string用户名)+847 System.Web.Security.RolePrincipal.IsInRole(stringangular色)+182
为什么下面这段代码起作用? struct A { std::vector<A> subAs; }; A是一个不完整的types,对不对? 如果有一个A *的vector,我会理解。 但在这里我不明白它是如何工作的。 这似乎是一个recursion的定义。
我知道这已经被问了很多次了,因此很难深入挖掘,find一个简单的例子。 我有这个,这很简单,它适用于MyClass … #include <iostream> using std::cout; using std::endl; class MyClass { public: MyClass(); static void Callback(MyClass* instance, int x); private: int private_x; }; class EventHandler { public: void addHandler(MyClass* owner) { cout << "Handler added…" << endl; //Let's pretend an event just occured owner->Callback(owner,1); } }; EventHandler* handler; MyClass::MyClass() { private_x = 5; handler->addHandler(this); […]
我知道定义的内联成员函数应该进入标题。 但是如果把函数的实现放到头文件中呢? 我们来看看这种情况: 档案啊 #pragma once #include "Bh" class A{ B b; }; 文件Bh #pragma once class A; //forward declaration class B{ inline A getA(); }; 由于通知包括我必须把执行getA到 B.cpp #include "Bh" #include "Ah" inline AB::getA(){ return A(); } 编译器会内联getA吗? 如果是这样,哪个inline关键字是重要的(头文件或者.cpp文件中的那个)? 有没有另一种方法将内联成员函数的定义放入它的.cpp文件中?
我有一个关于在PHP静态function的问题。 让我们假设我有一个class级 class test { public function sayHi() { echo 'hi'; } } 如果我test::sayHi(); 它工作没有问题。 class test { public static function sayHi() { echo 'hi'; } } test::sayHi(); 也适用。 第一课和第二课有什么区别? 静态函数有什么特别之处?
我正在练习使用多个文件和头文件等,所以我有这个项目需要两个数字,然后添加它们。 很简单。 这是我的文件: main.cpp中 #include <iostream> #include "add.h" int main() { int x = readNumber(); int y = readNumber(); writeAnswer(x + y); return(0); } io.cpp int readNumber() { int x; std::cout << "Number: "; std::cin >> x; return x; } void writeAnswer(int x) { std::cout << "Answer: "; std::cout << x; } add.h #ifndef ADD_H_INCLUDED […]
我正在查看LinkedList的Java代码,并注意到它使用了静态嵌套类Entry 。 public class LinkedList<E> … { … private static class Entry<E> { … } } 什么是使用静态嵌套类,而不是一个正常的内部类的原因是什么? 我能想到的唯一原因是Entry不能访问实例variables,所以从OOP的angular度来看,它具有更好的封装性。 但我想可能还有其他的原因,也许是performance。 它可能是什么? 注意。 我希望我已经得到了我的条款正确的,我会把它称为一个静态的内部类,但我认为这是错误的: http : //java.sun.com/docs/books/tutorial/java/javaOO/nested.html